match(pattern,string,flags=0)函数只检测字符串开头位置是否匹配,匹配成功才会返回结果,否则返回None;fullmatch要求的是整个搜索文本与模式串全完全匹配,如果完整匹配到了正则表达式样式,就返回一个相应的 匹配对象,否则返回None。
注意:如果搜索文本能找到匹配串但比匹配模式多出更多的内容也返回None。
import re
print(re.match("func", "function"))
# 打印结果 <_sre.sre_match object span&#61;"(0," match&#61;"func">
print(re.match("func", "function").span())
# 打印结果 (0, 4)
print(re.match("func1", "function"))
# 打印结果 None
注意&#xff1a;print(re.match("func1", "function").span())会报错&#xff0c;因为取不到span
search(pattern,string,flags&#61;0)函数会在整个字符串内查找模式匹配,只到找到第一个匹配然后返回一个包含匹配信息的对象,该对象可以通过调用group()方法得到匹配的字符串,如果字符串没有匹配&#xff0c;则返回None。
注意&#xff1a;group使用时分组的分组0是给match在用&#xff0c;真正生成的分组是从1开始的
import re
print(re.search("tion", "function"))
# 打印结果 <_sre.sre_match object span&#61;"(4," match&#61;"tion">
print(re.search("tion", "function").span())
# 打印结果 (4, 8)
print(re.search("tion1", "function"))
# 打印结果 None
注意&#xff1a;print(re.search("tion1", "function").span())会报错&#xff0c;因为取不到tion1
re.compile(pattern,flags&#61;0)设定flags&#xff0c;编辑模式&#xff0c;返回正则表达式对象regex。pattern就是正则表达式字符串&#xff0c;flags是选项&#xff0c;正则表达式需要被编译&#xff0c;为了提高效率&#xff0c;这些编译后的结果被保存&#xff0c;下次使用相同的pattern的时候&#xff0c;就不需要再次编译
re模块下的其他常用方法
import re
print(re.findall("a", "a aa ab ac")) # 返回所有满足匹配条件的结果,放在列表里
# [&#39;a&#39;, &#39;a&#39;, &#39;a&#39;, &#39;a&#39;, &#39;a&#39;]
print(re.split(&#39;[ab]&#39;, &#39;abcd&#39;)) # 先按&#39;a&#39;分割得到&#39;&#39;和&#39;bcd&#39;,在对&#39;&#39;和&#39;bcd&#39;分别按&#39;b&#39;分割
# [&#39;&#39;, &#39;&#39;, &#39;cd&#39;]
ret &#61; re.sub(&#39;\d&#39;, &#39;H&#39;, &#39;eva3egon4yuan4&#39;, 1)#将数字替换成&#39;H&#39;&#xff0c;参数1表示只替换1个
print(ret) #evaHegon4yuan4
ret &#61; re.subn(&#39;\d&#39;, &#39;H&#39;, &#39;eva3egon4yuan4&#39;)#将数字替换成&#39;H&#39;&#xff0c;返回元组(替换的结果,替换了多少次)
print(ret)
obj &#61; re.compile(&#39;\d{3}&#39;) #将正则表达式编译成为一个 正则表达式对象&#xff0c;规则要匹配的是3个数字
ret &#61; obj.search(&#39;abc123eeee&#39;) #正则表达式对象调用search&#xff0c;参数为待匹配的字符串
print(ret.group()) #结果 &#xff1a; 123
import re
ret &#61; re.finditer(&#39;\d&#39;, &#39;ds3sy4784a&#39;) #finditer返回一个存放匹配结果的迭代器
print(ret) #
print(next(ret).group()) #查看第一个结果
print(next(ret).group()) #查看第二个结果
print([i.group() for i in ret]) #查看剩余的左右结果
注意&#xff1a;
1 findall的优先级查询&#xff1a;
import re
ret &#61; re.findall(&#39;www.(baidu|jd).com&#39;, &#39;www.jd.com&#39;)
print(ret) # [&#39;jd&#39;] 这是因为findall会优先把匹配结果组里内容返回,如果想要匹配结果,取消权限即可
ret &#61; re.findall(&#39;www.(?:baidu|jd).com&#39;, &#39;www.jd.com&#39;)
print(ret) # [&#39;www.jd.com&#39;]
2 split的优先级查询
ret&#61;re.split("\d&#43;","eva3egon4yuan")
print(ret) #结果 &#xff1a; [&#39;eva&#39;, &#39;egon&#39;, &#39;yuan&#39;]
ret&#61;re.split("(\d&#43;)","eva3egon4yuan")
print(ret) #结果 &#xff1a; [&#39;eva&#39;, &#39;3&#39;, &#39;egon&#39;, &#39;4&#39;, &#39;yuan&#39;]
#在匹配部分加上()之后所切出的结果是不同的&#xff0c;
#没有()的没有保留所匹配的项&#xff0c;但是有()的却能够保留了匹配的项&#xff0c;
#这个在某些需要保留匹配部分的使用过程是非常重要的。