首页 > python学习 > python中的re模块
2019
01-21

python中的re模块

python中,通过内嵌集成re模块,可以直接调用来实现正则匹配。

match(pattern, string, flags=0):在string的开始位置匹配且只匹配一次,只有在0位置匹配成功才返回匹配的re.Match对象,否则返回none

fullmatch(pattern, string, flags=0):在string的开始和结尾位置都匹配才返回匹配的re.Match对象,否则返回none

search(pattern,string,flags=0):扫描整个字符串并返回第一个匹配,如果没有匹配返回 None。

match、fullmatch和search匹配成功返回一个Match object对象,有以下属性和方法:

属性:

string: 匹配时使用的文本。

re: 匹配时使用的Pattern对象。

pos: 文本中正则表达式开始搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名参数相同。

endpos: 文本中正则表达式结束搜索的索引。值与Pattern.match()和Pattern.seach()方法的同名参数相同。

方法:

group([group1, …]):

获得一个或多个分组截获的字符串;指定多个参数时将以元组形式返回。group1可以使用编号也可以使用别名;编号0代表整个匹配的字符串;不填写参数时,默认返回group(0);没有截获字符串的组返回None;截获了多次的组返回最后一次截获的子串。

groups([default]):

以元组形式返回全部分组截获的字符串。相当于调用group(1,2,…last)。default表示没有截获字符串的组以这个值替代,默认为None。

expand(template):

将匹配到的分组代入template中然后返回。template中使用\id或\g<id>、\g<name>引用分组,但不能使用编号0。

m = re.match(r"(\w+)\s(\w+)\s(\w+)", "first second third")

print(m.expand(r"\2 组合 \1 的 \2 字符串 \3"))

second 组合 first 的 second 字符串 third

start([group]):

返回指定的组截获的子串在string中的起始索引(子串第一个字符的索引)。group默认值为0。

end([group]):

返回指定的组截获的子串在string中的结束索引(子串最后一个字符的索引+1)。group默认值为0。

span([group]):返回(start(group), end(group))。

sub(pattern, repl, string, count=0, flags=0):使用repl替换string中每一个匹配的子串后返回替换后的字符串。当repl是一个字符串时,可以使用\id与\g<id>(这两个方法等价)或\g<name>反向引用,但不能使用编号0。当repl是一个方法时,这个方法应当只接受一个参数(Match对象),并返回一个字符串用于替换(返回的字符串中不能再引用分组)。count用于指定最多替换次数,不指定时全部替换。

print(re.sub(r'(\w+)\s(\w+)',r'\2 \1','i say, hello world!',1))
say i, hello world!
def f(m):
    return m.group(1)+' '+m.group(2).upper()
print(re.sub(r'(\w+)\s(\w+)',f,'i say, hello world!'))
i SAY, hello WORLD! #把第二个单词转换为大写字母

subn(pattern, repl, string, count=0, flags=0):用法和功能和sub()相同,返回一个元组(new_string, number)new_string为字符串替换后的新字符串,number为匹配及替换的次数。

split(pattern, string, maxsplit=0, flags=0):按照能够匹配的子串将string分割后返回列表。maxsplit用于指定最大分割次数,默认全部分割。如设定好分割次数后,最后未分割部分将作为列表中的最后一个元素返回。

findall(pattern, string, flags=0):搜索string,以列表形式返回全部能匹配的子串,没有匹配返回空列表

finditer(pattern, string, flags=0):找到匹配的所有子串,并把它们作为一个迭代器返回。这个匹配是从左到右有序地返回。如果无匹配,返回空列表。

escape(string)用于将string中的正则表达式元字符加上转义符再返回

compile(strPattern, flags=0)用于将字符串形式的正则表达式编译为Pattern对象(可以把那些常用的正则表达式编译成正则表达式对象,可以提高一点效率)。

purge():删除Pattern对象,原对象引用转为'NoneType'对象。

通过compile(strPattern, flags=0)方法编译的Pattern对象也有自己的属性和方法:

属性:

Pattern.flags:Pattern对象的匹配模式

Pattern.pattern:Pattern对象编译的正则表达式的字符串

方法:

Pattern.search(string[, pos[, endpos]])
Pattern.match(string[, pos[, endpos]])
Pattern.fullmatch(string[, pos[, endpos]])
Pattern.split(string, maxsplit=0)
Pattern.findall(string[, pos[, endpos]])
Pattern.finditer(string[, pos[, endpos]])
Pattern.sub(repl, string, count=0)
Pattern.subn(repl, string, count=0)

flag参数

上有的方法大多含有一个flag参数,参数flag是匹配模式,可以使用'|'表示多种模式同时生效,如re.I | re.M,匹配模式可以修改正则表达式的一些运行方式。参数flag可以使用两个名字,一个是全名如IGNORECASE,一个是缩写形式如I。此外,也可以在regex字符串中指定匹配模式,如re.compile('pattern', re.I | re.M)与re.compile('(?im)pattern')是等价的。

对于flag 可选值有:

re.A(re.ASCII):使得转义符号如 \w,\b,\s 和 \d 只能匹配 ASCII 字符,仅对 Unicode 模式有意义,并忽略字节模式。

re.I(re.IGNORECASE):忽略大小写,使匹配对大小写不敏感

re.M (re.MULTILINE):多行模式,改变'^'和'$'的行为

re.S(re.DOTALL):点任意匹配模式,使 '.' 匹配包括换行在内的所有字符("."默认匹配除了换行外的任何字符)。

re.L(re.LOCALE):做本地化识别(locale-aware)匹配,使预定字符类 \w \W \b \B \s \S 取决于当前区域设定。locales 是 C 语言库中的一项功能,是用来为需要考虑不同语言的编程提供帮助的。举个例子,如果你正在处理法文文本,你想用 "w+ 来匹配文字,但 "w 只匹配字符类 [A-Za-z];它并不能匹配 "é" 或 "?"。如果你的系统配置适当且本地化设置为法语,那么内部的 C 函数将告诉程序 "é" 也应该被认为是一个字母。

re.U(re.UNICODE):根据Unicode字符集解析字符,使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性

re.X(re.VERBOSE):这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。

最后编辑:
作者:qingheluo
这个作者貌似有点懒,什么都没有留下。