Python 正则表达式 *, + 和 ? 符号
引言
这里简单说明一下 Python
正则表达式中的 *
, +
和 ?
符号。
正文
* 符号
对它前面的正则式匹配 0
到任意次重复, 尽量多的匹配字符串。 ab*
会匹配 'a'
,'ab'
,或者 'a'
后面跟随任意个 'b'
。
python
import re
str1 = 'a'
print(re.search('ab*', str1))
str1 = 'ab'
print(re.search('ab*', str1))
str1 = 'abbbbbbbbbbbbbbbbb'
print(re.search('ab*', str1))
str1 = 'abbbbbbbbbbbbbbbbbccc'
print(re.search('ab*', str1))
"""
result:
<re.Match object; span=(0, 1), match='a'>
<re.Match object; span=(0, 2), match='ab'>
<re.Match object; span=(0, 18), match='abbbbbbbbbbbbbbbbb'>
<re.Match object; span=(0, 18), match='abbbbbbbbbbbbbbbbb'>
"""
上述的结果显而易见,当字符串为单个字符 a
时, ab?
会匹配到单个字符 a
,当字符串为 ab
时,会匹配到 ab
,当字符串为 abbbbbbbbbbbbbbbbb
时,会匹配到 abbbbbbbbbbbbbbbbb
。当字符串为 abbbbbbbbbbbbbbbbbccc
时,还是会匹配到 abbbbbbbbbbbbbbbbb
。因此,我们说,*
符号类似于贪婪模式,会尽可能匹配到所有能够匹配到的字符。
+ 符号
对它前面的正则式匹配 1
到任意次重复。 ab+
会匹配 a
后面跟随 1
个以上到任意个 b
,它不会匹配 a
。
python
import re
str1 = 'a'
print(re.search('ab+', str1))
str1 = 'ab'
print(re.search('ab+', str1))
str1 = 'abbbbbbbbbbbbbbbbb'
print(re.search('ab+', str1))
str1 = 'abbbbbbbbbbbbbbbbbccc'
print(re.search('ab+', str1))
"""
result:
None
<re.Match object; span=(0, 2), match='ab'>
<re.Match object; span=(0, 18), match='abbbbbbbbbbbbbbbbb'>
<re.Match object; span=(0, 18), match='abbbbbbbbbbbbbbbbb'>
"""
不同于贪婪匹配 ab*
,ab+
对于单个字符 a
,返回的是 None
结果。
? 符号
对它前面的正则式匹配 0
到 1
次重复。 ab?
会匹配 a
或者 ab
。
python
import re
str1 = 'a'
print(re.search('ab?', str1))
str1 = 'ab'
print(re.search('ab?', str1))
str1 = 'abbbbbbbbbbbbbbbbb'
print(re.search('ab?', str1))
str1 = 'abbbbbbbbbbbbbbbbbccc'
print(re.search('ab?', str1))
"""
result:
<re.Match object; span=(0, 1), match='a'>
<re.Match object; span=(0, 2), match='ab'>
<re.Match object; span=(0, 2), match='ab'>
<re.Match object; span=(0, 2), match='ab'>
"""
结果显而易见,这里不做过多解释了。
如果大家觉得有用,就请点个赞吧~