正则杂记

Posted ringo-joy0

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正则杂记相关的知识,希望对你有一定的参考价值。

关于re模块中search()、match()、findall()的区别

首先看search()跟match()的区别


import re
a = python Python CDpython CDPython
re1 = re.search(r(p|P)ython,a)
print(re1.groups())
print(re1)
re2 = re.match(r(P|p)ython,a)
print(re2.groups())
print(re2)
#out
(p,)
<re.Match object; span=(0, 6), match=python>
(p,)
<re.Match object; span=(0, 6), match=python>

 发现search跟match这样匹配都是可以的。

 再来看一下

import re
a = apython Python CDpython CDPython‘  #多了一个a
re1 = re.search(r(p|P)ython,a)
print(re1.groups())
print(re1)
re2 = re.match(r(P|p)ython,a)
# print(re2.groups())  这里会报错,原因是没有匹配到子表达式
print(re2)

#out
(p,)
<re.Match object; span=(1, 7), match=python>
None  

 通过上面返回内容不一样,可以看出,match函数匹配时会按照从左到右顺序匹配元字符,如果首字符不是子表达式里面的,就什么也匹配不到。会返回None,结束匹配。

 至于groups()去提取匹配结果就更不用说了。

 所以,search就会实用一点,match看实际需求吧

再来看findall

re3 = re.findall(r(p|P)ython,a)
print(re3)
#out
[p, P, p, P]

可以看出findall就有意思多了,它把每个边界的字符都匹配到了,返回一个字典,很直观。

 参考:https://www.cnblogs.com/Angliu/archive/2018/06/30/9247611.html

以上是关于正则杂记的主要内容,如果未能解决你的问题,请参考以下文章

正则杂记-sub()灵活运用

正则杂记-sub()灵活运用

通过 Java 正则表达式提取 semver 版本字符串的片段

text 正则表达式片段

markdown 正则表达式模式片段

正则表达式匹配特定的 URL 片段而不是所有其他 URL 可能性