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.*\\!')

 

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.*)', '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.*)')
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.*)',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.*)
p.flags: 48
p.groups: 3
p.groupindex {'sign': 3}

你可能感兴趣的:(Python正则表达式)