4.模式语法——字符集

字符集([])



字符集是一组字符,包含可以与模式中相应位置匹配的所有字符,例如[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'>

你可能感兴趣的:(4.模式语法——字符集)