re.compile(pattern, flags)
- 将正则表达式pattern编译成pattern对象,并返回该对象,可以调用match, search等方法来匹配各种字符串。
- 直接用pattern不是更方便吗,我认为,使用compile的方式,可以加上flags,比如忽略大小写。
- 感觉有点鸡肋就是了,其他的match, search等等都可以实现flags功能
- 优点:经常使用的正则表达式编译成正则表达式对象,这样可以提高一定的效率
- pattern.match(string, pos, endpos), 返回匹配到的字符串对象,pos表示开始匹配的字符起始位置,endpos表示结束位置,一般可以不设置,通过.group()获得匹配到的内容,使用.string属性获得包含匹配内容的完整文本内容。
import re
# 将正则表达式编译成Pattern对象
pattern = re.compile(r'hello')
# 使用Pattern匹配文本,获得匹配结果,无法匹配时将返回None
match = pattern.match('hello world!')
if match:
# 使用Match获得分组信息
print(match.group())
hello
re.match(pattern, string, flags)
- 传入正则表达式pattern
- 传入被匹配的字符串string
- 设定匹配的属性flags
- 返回的是匹配到的对象,需要通过.group()来查看匹配到的内容, 使用.string属性获得包含匹配内容的完整文本内容。
m = re.match(r'hello', 'Hello, world!!!', flags=re.IGNORECASE)
print(m)
print(m.string)
print(m.group())
<_sre.SRE_Match object; span=(0, 5), match=‘Hello’>
Hello, world!!!
Hello
与pattern.match()区别:
- re.match()没有pos, endpos指定字符串开始结束的位置的参数
pattern. search()方法
函数作用:
该方法的作用是在string[pos, endpos]区间从pos下标处开始匹配pattern,如果匹配成功,返回匹配成功的Match对象;
如果没有匹配成功,则将pos加1后重新尝试匹配,直到pos=endpos时仍无法匹配则返回None。
参数说明:
string:被匹配的字符串
pos:匹配的起始位置,可选,默认为0
endpos:匹配的结束位置,可选,默认为len(string)
也就是说如果不指定pos和endpos这两个参数的话,该方法会扫描整个字符串。
例子:
pattern=re.compile("\d+\w*")
pattern.search("12abc123ABc123",0,10).group()
‘12abc123AB’
pattern.search("12abc123ABc123",0,9).group()
‘12abc123A’
re.search方法:
扫描整个字符串并返回第一次成功的匹配对象,如果匹配失败,则返回None。
参数说明:
pattern:匹配的正则表达式
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式。如是否区分大小写、是否多行匹配等。
re.search(r"[abc]\*\d{2}","12a*23Gb*12ab").group()
‘a*23’
re.search()方法与pattern.search()方法区别:
re.search()不能指定匹配的区间pos和endpos两个参数。
re.match与re.search的区别:
re.match只匹配字符串的开始,如果字符串开始不符合正则表达式,则匹配失败,并返货None;
而re.search匹配整个字符串,直到找到一个匹配。