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

posted @ 2023-10-16 18:56  donfag  阅读(52)  评论(0)    收藏  举报