重复
模式中有5中表示重复的方法,现在一一展示:
符号 | 含义 |
---|---|
* | 出现0次或多次 |
+ | 至少出现1次 |
? | 出现0次或1次 |
{m} | 出现m次 |
{m,n} | 出现m到n次 |
出现0次或多次
# * 表示该模式会重复0次或多次(重复0次即意味着它不出现也能被匹配)
# 匹配a开头,后面为0个或多个b,也就是只要出现a就能匹配
import re
# 文本
text = 'a ac ab abb abbb'
# 匹配规则
pattern = 'ab*'
print(re.findall(pattern,text))
for i in re.finditer(pattern,text):
print(i)
>>>
['a', 'a', 'ab', 'abb', 'abbb']
<_sre.SRE_Match object; span=(0, 1), match='a'>
<_sre.SRE_Match object; span=(2, 3), match='a'>
<_sre.SRE_Match object; span=(5, 7), match='ab'>
<_sre.SRE_Match object; span=(8, 11), match='abb'>
<_sre.SRE_Match object; span=(12, 16), match='abbb'>
至少出现1次
# + 表示该模式至少出现一次
# 匹配a开头,后面至少有1个b的
import re
# 文本
text = 'a ac ab abb abbb'
# 匹配规则
pattern = 'ab+'
print(re.findall(pattern,text))
for i in re.finditer(pattern,text):
print(i)
>>>
['ab', 'abb', 'abbb']
<_sre.SRE_Match object; span=(5, 7), match='ab'>
<_sre.SRE_Match object; span=(8, 11), match='abb'>
<_sre.SRE_Match object; span=(12, 16), match='abbb'>
出现0次或1次
# ? 表示模式出现0次或1次
# 匹配a开头,后面为0个或1个b,也就是只要出现a就能匹配
import re
# 文本
text = 'a ab abb abbb'
# 匹配规则
pattern = 'ab?'
print(re.findall(pattern,text))
for i in re.finditer(pattern,text):
print(i)
>>>
['a', 'ab', 'ab', 'ab']
<_sre.SRE_Match object; span=(0, 1), match='a'>
<_sre.SRE_Match object; span=(2, 4), match='ab'>
<_sre.SRE_Match object; span=(5, 7), match='ab'>
<_sre.SRE_Match object; span=(9, 11), match='ab'>
出现m次
# 匹配a开头,后面3个b
import re
# 文本
text = 'a ab abb abbb'
# 匹配规则
pattern = 'ab{3}'
print(re.findall(pattern,text))
for i in re.finditer(pattern,text):
print(i)
>>>
['abbb']
<_sre.SRE_Match object; span=(9, 13), match='abbb'>
出现m到n次
# 匹配a开头,后面1到3个b
import re
# 文本
text = 'a ab abb abbb'
# 匹配规则
pattern = 'ab{1,3}'
print(re.findall(pattern,text))
for i in re.finditer(pattern,text):
print(i)
>>>
['ab', 'abb', 'abbb']
<_sre.SRE_Match object; span=(2, 4), match='ab'>
<_sre.SRE_Match object; span=(5, 8), match='abb'>
<_sre.SRE_Match object; span=(9, 13), match='abbb'>