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
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
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):这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。