python正则表达式入门_Python中正则表达式基础知识

regex.findall(string,pos,endpos)

功能: 根据正则表达式匹配目标字符串内容

参数: string 目标字符串

pos 截取目标字符串的开始匹配位置

endpos 截取目标字符串的结束匹配位置

返回值: 匹配到的内容列表,如果正则表达式有子组则只能获取到子组对应的内容

import re

s = "Levi:1994,Sunny:1993"

pattern = r"(\w+):(\d+)"

# re模块调用

# l = re.findall(pattern, s)

# print(l)

# compile对象调用

regex = re.compile(pattern, flags=0)

l = regex.findall(s, 0, 55 )

print(l)

[('Levi', '1994'), ('Sunny', '1993')]

re.split(pattern,string,flags = 0)

功能: 使用正则表达式匹配内容,切割目标字符串

参数: pattern 正则表达式

string 目标字符串

flags 功能标志位,扩展正则表达式的匹配

返回值: 切割后的内容列表

importre

s= "hello world how are you"

#pattern = r"[^\w]+"

pattern = r"\W+"l=re.split(pattern, s)print(l)

re.sub(pattern,replace,string,max,flags = 0)

功能: 使用一个字符串替换正则表达式匹配到的内容

参数: pattern 正则表达式

replace 替换的字符串

string 目标字符串

max 最多替换几处,默认替换全部

flags 功能标志位,扩展正则表达式的匹配

返回值: 替换后的字符串

importre

s= "时间:2019/10/12"ns= re.sub(r'/', '-', s)print(ns)

时间:2019-10-12

re.subn(pattern,replace,string,max,flags = 0)

功能: 使用一个字符串替换正则表达式匹配到的内容

参数: pattern 正则表达式

replace 替换的字符串

string 目标字符串

max 最多替换几处,默认替换全部

flags 功能标志位,扩展正则表达式的匹配

返回值: 替换后的字符串和替换了几处

importre

s= "时间:2019/10/12"ns= re.subn(r'/', '-', s, 4)print(ns)

('时间:2019-10-12', 2)

re.finditer(pattern,string,flags = 0)

功能: 根据正则表达式匹配目标字符串内容

参数: pattern 正则表达式

string 目标字符串

flags 功能标志位,扩展正则表达式的匹配

返回值: 匹配结果的迭代器(迭代器用一个取一个,节省内存资源)

importre

s= '2019年,建国70周年'pattern= r"\d+"ite=re.finditer(pattern, s)#方法1

print("ite类型", type(ite))print(ite.__next__().group())print(ite.__next__().group())#方法2

print("=========")for i inite:print(i.group())

ite类型

2019

70

re.fullmatch(pattern,string,flags=0)

功能:完全匹配某个目标字符串

参数:pattern 正则

string 目标字符串

返回值:匹配内容match object

注:该函数可用于密码验证:密码只允许字母和数字,如果返回值为None,则密码不符合规范,含有数字和字母以外的字符

importre

m= re.fullmatch(r'\w+',"hello1973")print(m.group())

importre

#验证密码是否符合规范---只含字母和数字

m= re.fullmatch(r'[0-9A-Za-z]+', "hello1973")print(m.group())

hello1973

re.match(pattern,string,flags=0)

功能:匹配某个目标字符串开始位置

参数:pattern 正则

string 目标字符串

返回值:匹配内容match object

importre

m= re.match(r'[A-Z]\w*',"Hello1973")print(m.group())

Hello1973

re.search(pattern,string,flags=0)

功能:匹配目标字符串第一个符合内容

参数:pattern 正则

string 目标字符串

返回值:匹配内容match object

importre

m= re.search(r'\S+', "好\n嗨 哟")print(m.group())

compile对象属性

【1】 flags : flags值--------注:不要跟参数flags混淆了

【2】 pattern : 正则表达式

【3】 groups : 子组数量

【4】 groupindex : 捕获组名与组序号的字典

2.match对象的属性方法

1. 属性变量

pos 匹配的目标字符串开始位置

endpos 匹配的目标字符串结束位置

re 正则表达式

string 目标字符串

lastgroup 最后一组的名称

lastindex 最后一组的序号

importre

pattern= r"(ab)cd(?Pef)"regex=re.compile(pattern)#生成match对象

obj = regex.search("abcdefghi", pos=0, endpos=7)#演示match对象属性变量

print(obj.pos)print(obj.endpos)print(obj.re)print(obj.string)print(obj.lastgroup)print(obj.lastindex)

07re.compile('(ab)cd(?Pef)')

abcdefghi

pig2

2. 属性方法

span() 获取匹配内容的起止位置

start() 获取匹配内容的开始位置

end() 获取匹配内容的结束位置

groupdict() 获取捕获组字典,组名为键,对应内容为值

groups() 获取子组对应内容

group(n = 0)

功能:获取match对象匹配内容

参数:默认为0表示获取整个match对象内容,如果是序列号或者组名则表示获取对应子组内容

返回值:匹配字符串

importre

pattern= r"(ab)cd(?Pef)"regex=re.compile(pattern)#生成match对象

obj = regex.search("abcdefghi", pos=0, endpos=7)#演示match对象方法

print(obj.start())print(obj.end())print(obj.span())print(obj.groupdict())print(obj.groups())print(obj.group())#获取整个match对象内容

print(obj.group(1))#获取第一子组内容

print(obj.group('pig'))#获取组名为pig的子组内容

06(0,6)

{'pig': 'ef'}

('ab', 'ef')

abcdef

ab

ef

1494002-20190517135057908-519113386.png

3.flags参数

1. 使用函数:re模块调用的匹配函数。如:re.compile,re.findall,re.search....

2.作用:扩展丰富正则表达式的匹配功能

3.常用flag

A == ASCII 元字符只能匹配ascii码

importre

s= """hello world

你好,北京"""

#只能匹配ASCII码字符

regex = re.compile(r'\w+', flags=re.A)

l=regex.findall(s)print(l)

['Hello', 'world']

I == IGNORECASE 匹配忽略字母大小写

importre

s= """Hello world

你好,北京"""

#匹配时忽略字母大小写

regex = re.compile(r'[A-Z]+', flags=re.I)

l=regex.findall(s)print(l)

['Hello', 'world']

S == DOTALL 使 . 可以匹配换行

importre

s= """Hello world

你好,北京"""

#匹配时不可以匹配换行

regex = re.compile(r'.+')

l=regex.findall(s)print(l)

['Hello world', '你好,北京']

importre

s= """Hello world

你好,北京"""

#匹配时可以匹配换行

regex = re.compile(r'.+',flags=re.S)

l=regex.findall(s)print(l)

['Hello world\n你好,北京\n']

M == MULTILINE 使 ^ $可以匹配每一行的开头结尾位置

importre

s= """Hello world

你好,北京"""

#匹配每一行的开头或者结尾

regex = re.compile(r'world$',flags=re.M)

l=regex.findall(s)print(l)

['world']

X == VERBOSE 为正则添加注释

importre

s= """Hello world

你好,北京"""

#匹配每一行的开头或者结尾

pattern= r"""\w+ # 第一部分

\s+ # 第二部分

\w+ # 第三部分"""regex= re.compile(pattern,flags=re.X)

l=regex.findall(s)print(l)

['Hello world']

4. 使用多个flag

方法:使用按位或连接

e.g. : flags = re.I | re.A

代码实例:

"""匹配每段IP地址,要求:

根据输入的每段首单词,获取IP地址"""

importreimportsys

port= sys.argv[1]

f= open('1.txt')#找到port段落

whileTrue:

data= ''

for line inf:if line != '\n': #不是空行

data +=lineelse:break

if not data: #文件结尾

print("Not Found the %s"%port)break

#匹配字符串首个单词

key_word = re.match(r'\S+',data).group()if port ==key_word:#匹配目标内容

#pattern = r"[0-9a-f]{4}\.[0-9a-f]{4}\.[0-9a-f]{4}"

pattern=r"(\d{1,3}\.){3}\d{1,3}/\d+|Unknow"

try:

address=re.search(pattern,data).group()print(address)except:print("No address")break

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值