一切过往,皆为序章,一切未知,皆为终章。

Python正则表达式

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('hello.*\\!')
<built-in method group of _sre.SRE_Match object at 0x000001BA179C2ED0>
 

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 \B \s \S取决于当前区域设定
    :re.U(UNICODE)使预定字符类 \w \W \b \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 \1\3'):", m.expand(r'\2 \1\3'))
 
m.string: hello World!
m.re: re.compile('(\\w+) (\\w+)(?P<sign>.*)')
m.pos: 0
m.endpos: 12
m.lastindex: 3
m.lastgroup: sign
m.group(1,2): ('hello', 'World')
m.groups(): ('hello', 'World', '!')
m.groupdict(): {'sign': '!'}
m.start(2): 6
m.end(2): 11
m.span(2): (6, 11)
m.expand(r'\2 \1\3'): World hello!
 

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)
 
p.pattern: (\w+)(\w+)(?P<sign>.*)
p.flags: 48
p.groups: 3
p.groupindex {'sign': 3}
posted @ 2019-04-06 09:21  爱吃帮帮糖  阅读(197)  评论(0编辑  收藏  举报