文本处理
分组命名
(?
在python环境中要加上大写的P: (?P
python环境中使用正则表达式
match
#打印出s的分解后的带有序
import re
s = """bottle\nbag\nbig\napple"""
for i,c in enumerate(s,1):
print((i-1,c),end='\n' if i%10==0 else ' ')
(0, 'b') (1, 'o') (2, 't') (3, 't') (4, 'l') (5, 'e') (6, '\n') (7, 'b') (8, 'a') (9, 'g')
(10, '\n') (11, 'b') (12, 'i') (13, 'g') (14, '\n') (15, 'a') (16, 'p') (17, 'p') (18, 'l') (19, 'e')
r = re.match('b', s)
print(type(r),r)
<class '_sre.SRE_Match'> <_sre.SRE_Match object; span=(0, 1), match='b'>
#r的类型是一个match,span为(0,1),前包后不包,第一个元素'b'
r = re.match('b', s)
print(r)
None
match只从头找,第一个是的话就出来结果。只要第一个不是,就返回None
在没有设定模式的情况下,默认是单行模式,
先编译,然后使用正则表达式
regex = re.compile('a')
result = regex.match(s)
print(result)
None
仍然是从头开始找,这次设置从字符串为15的开始找
regex = re.compile('a')
result = regex.match(s,15)
print(result)
<_sre.SRE_Match object; span=(15, 16), match='a'>
search
search是扫描找到匹配的第一个位置就返回
result = re.search('a',s)
print(result)
<_sre.SRE_Match object; span=(8, 9), match='a'>
多行模式下,找以a开头的,在15处找到了:
regex = re.compile('^a',re.M)
result = regex.search(s,8)
print(result)
<_sre.SRE_Match object; span=(15, 16), match='a'>
fullmatch
全长完全匹配,即是将整个字符串完全匹配