重復(fù)
模式中有5中表示重復(fù)的方法,現(xiàn)在一一展示:
| 符號(hào) | 含義 |
|---|---|
| * | 出現(xiàn)0次或多次 |
| + | 至少出現(xiàn)1次 |
| ? | 出現(xiàn)0次或1次 |
| {m} | 出現(xiàn)m次 |
| {m,n} | 出現(xiàn)m到n次 |
出現(xiàn)0次或多次
# * 表示該模式會(huì)重復(fù)0次或多次(重復(fù)0次即意味著它不出現(xiàn)也能被匹配)
# 匹配a開(kāi)頭,后面為0個(gè)或多個(gè)b,也就是只要出現(xiàn)a就能匹配
import re
# 文本
text = 'a ac ab abb abbb'
# 匹配規(guī)則
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'>
至少出現(xiàn)1次
# + 表示該模式至少出現(xiàn)一次
# 匹配a開(kāi)頭,后面至少有1個(gè)b的
import re
# 文本
text = 'a ac ab abb abbb'
# 匹配規(guī)則
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'>
出現(xiàn)0次或1次
# ? 表示模式出現(xiàn)0次或1次
# 匹配a開(kāi)頭,后面為0個(gè)或1個(gè)b,也就是只要出現(xiàn)a就能匹配
import re
# 文本
text = 'a ab abb abbb'
# 匹配規(guī)則
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'>
出現(xiàn)m次
# 匹配a開(kāi)頭,后面3個(gè)b
import re
# 文本
text = 'a ab abb abbb'
# 匹配規(guī)則
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'>
出現(xiàn)m到n次
# 匹配a開(kāi)頭,后面1到3個(gè)b
import re
# 文本
text = 'a ab abb abbb'
# 匹配規(guī)則
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'>