re模块
re模块用于python中的正则表达式,其常用方法:
一、re.match() 尝试从字符串的起始位置匹配一个模式,如果匹配成功就返回一个匹配对角、如果没有匹配成功就返回None,函数用法:
re.match(pattern,string,flags=0)
flags标志位用于控制正则表达式的匹配方式,如是否区分大小写、多行匹配等,如果同时用到多个可以用|分隔,主要标志见下:
re.I 不区分大小写
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响^和$
re.S 使匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符,影响\w、\W、\b、\B
re.X 忽略规则表达式中的空白和注释,允许使用#来引导一个注释
示例:
1 import re 2 3 string = "python is my love" 4 pattern1 = "python" 5 pattern2 = "love" 6 7 if re.match(pattern1,string,re.I | re.M): 8 print(f"{pattern1}匹配成功") 9 else: 10 print(f"{pattern1}匹配不成功") 11 12 if re.match(pattern2,string,re.I | re.M): 13 print(f"{pattern2}匹配成功") 14 else: 15 print(f"{pattern2}匹配不成功")
返回结果:
python匹配成功
love匹配不成功
二、re.search() 扫描整个字符串并返回第一个成功的匹配,同re.match()一样,可以用group来获取分组,group(0)是整个正则表达式的搜索结果、group(1)是第一个组、依次类推。用法如下:
re.search(pattern,string,flags=0)
示例:
1 import re 2 3 string = "python is my love things" 4 pat = r'(.*) is my (.*?) .*' 5 searchObj = re.search(pat,string,re.I) 6 if searchObj: 7 print("searchObj.group():",searchObj.group()) 8 print("searchObj.group(0):", searchObj.group(0)) 9 print("searchObj.group(1):", searchObj.group(1)) 10 print("searchObj.group(2):", searchObj.group(2)) 11 print("searchObj.groups():", searchObj.groups())
返回结果:
searchObj.group(): python is my love things
searchObj.group(0): python is my love things
searchObj.group(1): python
searchObj.group(2): love
searchObj.groups(): ('python', 'love')
三、re.findall() 在字符串中找到正则表达式所匹配的所有子串,并返回一个列表,如果没有找到匹配,则返回一个空列表,re.match()和re.search()只匹配一次,re.findall()匹配所有,用法如下:
re.findall(pattern,string,flags=0)
示例:
1 import re 2 3 res = re.findall(r'\d+','abc123def456hij789') 4 print(res)
返回结果:
['123', '456', '789']
四、re.compile 编译正则表达式模式,返回一个对象。可以把常用的正则表达式编译成正则表达式对象,方便后续调用及提高效率。
re.compile(pattern,flags=0)
示例:
1 import re 2 3 pat = re.compile(r'\d+',re.I) 4 res1 = pat.findall('abc123def456hij789') 5 res2 = pat.findall('aaa 222 bbb 333') 6 print(res1) 7 print(res2)
返回结果:
['123', '456', '789']
['222', '333']
五、re.sub() 替换正则表达式里匹配的内容,用法如下:
sub(pattern, repl, string, count=0, flags=0)
pattern:表示正则中的模式字符串;
repl:表示要替换的字符串(即匹配到pattern后替换为repl),也可以是个函数;
string:表示要被处理(查找替换)的原始字符串;
count:可选参数,表示要替换的最大次数,而且必须是非负整数,该参数默认为0,即所有的匹配都会替换;
flags:可选参数,表示编译时用的匹配模式(如忽略大小写、多行模式等),数字形式,默认为0。
示例:
1 import re 2 string = "I am 100 years old and my phone number is 12345678900" 3 new_string = re.sub(r'\d','*',string) 4 print(new_string)
返回结果:
I am *** years old and my phone number is ***********
六、re.split() 用正则表达式分隔字符串,如果有匹配,则返回一个列表;如果没有匹配,则返回一个整个字符串为元素的列表。用法如下:
re.split(pattern, string, maxsplit=0, flags=0)
示例:
1 import re 2 string = "I am 100 years old and my phone number is 12345678900" 3 lst1 = re.split(r'\s',string) 4 lst2 = re.split(r'\s',string,2) 5 lst3 = re.split(r'\t',string,2) 6 print(lst1) 7 print(lst2) 8 print(lst3)
返回结果:
['I', 'am', '100', 'years', 'old', 'and', 'my', 'phone', 'number', 'is', '12345678900']
['I', 'am', '100 years old and my phone number is 12345678900']
['I am 100 years old and my phone number is 12345678900']
浙公网安备 33010602011771号