字符集([])
字符集是一组字符,包含可以与模式中相应位置匹配的所有字符,例如[ab]可以匹配a或b。
# 匹配所有a或b
import re
# 文本
text = 'abca'
# 匹配规则
pattern = '[ab]'
print(re.findall(pattern,text))
for i in re.finditer(pattern,text):
print(i)
>>>
['a', 'b', 'a']
<_sre.SRE_Match object; span=(0, 1), match='a'>
<_sre.SRE_Match object; span=(1, 2), match='b'>
<_sre.SRE_Match object; span=(3, 4), match='a'>
# 匹配a开头,后面是一个a或一个b的
import re
# 文本
text = 'a aa ab abb ac'
# 匹配规则
pattern = 'a[ab]'
print(re.findall(pattern,text))
for i in re.finditer(pattern,text):
print(i)
>>>
['aa', 'ab', 'ab']
<_sre.SRE_Match object; span=(2, 4), match='aa'>
<_sre.SRE_Match object; span=(5, 7), match='ab'>
<_sre.SRE_Match object; span=(8, 10), match='ab'>
# 匹配a开头,后面是1个或多个a或b的
import re
# 文本
text = 'a ab aaaa abbb accc'
# 匹配规则
pattern = 'a[ab]+'
print(re.findall(pattern,text))
for i in re.finditer(pattern,text):
print(i)
>>>
['ab', 'aaaa', 'abbb']
<_sre.SRE_Match object; span=(2, 4), match='ab'>
<_sre.SRE_Match object; span=(5, 9), match='aaaa'>
<_sre.SRE_Match object; span=(10, 14), match='abbb'>
尖字符(^)
可以用来排除某些特定字符。
# 去掉了'c和d'
import re
# 文本
text = 'abcd'
# 匹配规则
pattern = '[^cd]'
print(re.findall(pattern,text))
for i in re.finditer(pattern,text):
print(i)
>>>
['a', 'b']
<_sre.SRE_Match object; span=(0, 1), match='a'>
<_sre.SRE_Match object; span=(1, 2), match='b'>
字符区间(character range)
字符区间定义了一个字符集,包含一个起点一个终点之间所有连续的字符集。
# 匹配所以小写字母
import re
# 文本
text = 'abc ABC Abc 123'
# 匹配规则
pattern = '[a-z]'
print(re.findall(pattern,text))
for i in re.finditer(pattern,text):
print(i)
>>>
['a', 'b', 'c', 'b', 'c']
<_sre.SRE_Match object; span=(0, 1), match='a'>
<_sre.SRE_Match object; span=(1, 2), match='b'>
<_sre.SRE_Match object; span=(2, 3), match='c'>
<_sre.SRE_Match object; span=(9, 10), match='b'>
<_sre.SRE_Match object; span=(10, 11), match='c'>
# 匹配所有大写字母
import re
# 文本
text = 'abc ABC Abc 123'
# 匹配规则
pattern = '[A-Z]'
print(re.findall(pattern,text))
for i in re.finditer(pattern,text):
print(i)
>>>
['A', 'B', 'C', 'A']
<_sre.SRE_Match object; span=(4, 5), match='A'>
<_sre.SRE_Match object; span=(5, 6), match='B'>
<_sre.SRE_Match object; span=(6, 7), match='C'>
<_sre.SRE_Match object; span=(8, 9), match='A'>
# 匹配所有字母,包含大小写
import re
# 文本
text = 'abc ABC Abc 123'
# 匹配规则
pattern = '[a-zA-Z]+'
print(re.findall(pattern,text))
for i in re.finditer(pattern,text):
print(i)
>>>
['abc', 'ABC', 'Abc']
<_sre.SRE_Match object; span=(0, 3), match='abc'>
<_sre.SRE_Match object; span=(4, 7), match='ABC'>
<_sre.SRE_Match object; span=(8, 11), match='Abc'>
# 匹配1个大写字母后面跟1个或多个小写字母
import re
# 文本
text = 'abc AbC Abc 123'
# 匹配规则
pattern = '[A-Z][a-z]+'
print(re.findall(pattern,text))
for i in re.finditer(pattern,text):
print(i)
>>>
['Ab', 'Abc']
<_sre.SRE_Match object; span=(4, 6), match='Ab'>
<_sre.SRE_Match object; span=(8, 11), match='Abc'>
元字符(.)
用于匹配该位置的任何字符
# a开头,后面跟1个任意字符
import re
# 文本
text = ':abcd a123'
# 匹配规则
pattern = 'a.'
print(re.findall(pattern,text))
for i in re.finditer(pattern,text):
print(i)
>>>
['ab', 'a1']
<_sre.SRE_Match object; span=(1, 3), match='ab'>
<_sre.SRE_Match object; span=(6, 8), match='a1'>
# a开头,后面跟任意字符,b结尾
import re
# 文本
text = ':a123b a123c'
# 匹配规则
pattern = 'a.*b'
print(re.findall(pattern,text))
for i in re.finditer(pattern,text):
print(i)
>>>
['a123b']
<_sre.SRE_Match object; span=(1, 6), match='a123b'>