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
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