Python 正则表达式¶
In [1]:
import re
pattern = re.compile(r'hello.*!')
print(pattern)
match = pattern.match('hello,World! how are you?')
if match:
print(match.group)
re.compile(strPattern[,flag]¶
这个方法是Pattern类的工厂方法,用于将字符串形式的正则表达式编译为Pattern对象。 flag:匹配模式,取值可以使用按位或运算符‘|’表示同时生效,eg:re.l|re.M。
#flag可选值:
:re.l(re.IGNORECASE)忽略大小写(括号内是完整写法,下同)
: re.S(DOTALL)点任意匹配模式,改变‘.’行为
:re.L(LOCALE)使预定字符类w W B s S取决于当前区域设定
:re.U(UNICODE)使预定字符类 w W B s S d D 取决于unicode定义的字符属性
: re.X(VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释
:re.M(MULTILINE)多行模式,该表‘^’和'$'的行为
#两种方式等价
regex_1 = re.compile(r"""d + #数字部分 . #小数点部分 d * #小数的数字部分""",re.X)
regex_2 = re.compile(r"d+.d*")
Match¶
Match对象是一次匹配的结果,包含了很多关于此次匹配的信息,可以使用Match提供的可读属性或方法来获取这些信息。
match属性:¶
•string: 匹配时使用的文本。
•re: 匹配时使用的Pattern对象。
•pos: 文本中正则表达式开始搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名参数相同。
•endpos: 文本中正则表达式结束搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名参数相同。
•lastindex: 最后一个被捕获的分组在文本中的索引。如果没有被捕获的分组,将为None。
•lastgroup: 最后一个被捕获的分组的别名。如果这个分组没有别名或者没有被捕获的分组,将为None。
In [2]:
import re
m = re.match(r'(w+) (w+)(?P<sign>.*)', 'hello World!')
print ("m.string:", m.string)
print ("m.re:", m.re)
print ("m.pos:", m.pos)
print ("m.endpos:", m.endpos)
print ("m.lastindex:", m.lastindex)
print ("m.lastgroup:", m.lastgroup)
print ("m.group(1,2):", m.group(1, 2))
print ("m.groups():", m.groups())
print ("m.groupdict():", m.groupdict())
print ("m.start(2):", m.start(2))
print ("m.end(2):", m.end(2))
print ("m.span(2):", m.span(2))
print (r"m.expand(r'2 13'):", m.expand(r'2 13'))
Pattern¶
Pattern对象时一个编译好的正则表达式,通过Pattern提供的一系列方法可以对文本进行匹配查找。
pattern不能直接实列化,必须使用re.compile()进行构造。
Pattern提供几个可读属性用于获取表达式的相关信息:
pattern:编译时用的表达式字符串
flags:编译时用的匹配模式。数字形式
groups:表达式中分组的数量
groupindex:以表达式中有别名的组的别名为键、以该组对应的编号为值的字典,没有别名的组不包含在内。
In [3]:
import re
p = re.compile(r'(w+)(w+)(?P<sign>.*)',re.DOTALL)
print("p.pattern:",p.pattern)
print("p.flags:",p.flags)
print("p.groups:",p.groups)
print("p.groupindex",p.groupindex)