python中正则表达式使用re模块进行处理
正则表达式的匹配规则可以参考上一篇博客内容https://blog.csdn.net/u013410838/article/details/104291214
目录
match.group([group1, ......]):返回一个或多个匹配的组
re模块常用方法如下:
re.compile
方法原型:
compile(pattern, flags=0)
Compile a regular expression pattern, returning a pattern object.
pattern :为正则字符串
flags:可以取值为:
re.I(re.IGNORECASE): 忽略大小写(括号内是完整写法,下同)
re.M(re.MULTILINE): 多行模式,影响^和$
re.S(re.DOTALL): 使.匹配包括换行在内的所有字符
re.L(re.LOCALE): 使预定字符类 \w \W \b \B \s \S 取决于当前区域设定
re.U(re.UNICODE): 使预定字符类 \w \W \b \B \s \S \d \D 取决于unicode定义的字符属性
re.X(re.VERBOSE): 详细模式。这个模式下正则表达式可以是多行,忽略空白字符,并可以加入注释。
compile方法用于将字符串格式的正则表达式,编译成pattern模式,如下两种方法等价:
prog = re.compile(pattern)
result = prog.match(string)
等价于:
result = re.match(pattern, string)
但是当正则表达式在一个程序中多次使用时,第一种预先编译的方法会使效率更高。
re.match
match(pattern, string, flags=0)
从string的开头开始匹配pattern的模式,flags参数与re.compile()中相同,当匹配成功,返回一个match对象,否则返回None
re.search
search(pattern, string, flags=0)
在string中查找pattern模式匹配的内容,成功,返回一个match对象,否则返回None
match和search的区别在于:search会检查给定字符串的任意位置的地方进行匹配,但是match是总是从给定字符串的开始进行匹配,比如:
m = re.match("foo", 'seafoo') #返回值为None
m = re.search("foo", 'seafoo') #返回值不为None
re.findall
re.
findall
(pattern, string, flags=0)
返回所有匹配的内容列表
re.finditer
re.
finditer
(pattern, string, flags=0)
返回匹配到内容的迭代器
re.split
re.
split
(pattern, string, maxsplit=0, flags=0)
按照模式分割字符串,maxsplit可以设置最大分割次数,返回分割之后的字符串列表
re.sub
re.
sub
(pattern, repl, string, count=0, flags=0)
字符串替换,将string中符合pattern的位置用repl替换,返回替换后的字符串对象
关于match模块的方法
match.group([group1, ......]):返回一个或多个匹配的组
用法:
import re
m = re.match(r"(\w+) (\w+)", "Malcolm Reynolds")
print("*******group()*******")
print(m.group()) #默认输出所有匹配组
print("*******group(0)*******")
print(m.group(0)) #索引为0表示输出所有匹配的组
print("*******group(1)*******")
print(m.group(1)) #索引为1表示输出第一个匹配组内容
print("*******group(2)*******")
print(m.group(2)) #同上
#**************对于带名称的正则表达式*************
m = re.match(r"(?P<firstname>\w+) (?P<lastname>\w+)", "Malcolm Reynolds")
print("******first name******")
print(m.group("firstname"))
print("******last name******")
print(m.group("lastname"))
输出如下:
match.
groups
(default=None)
以元组的形式返回所有匹配的组,default表示对于没有匹配到的组设置默认值
比如:
m = re.match(r"(\d+)\.?(\d+)?", "24")
如上正则表达式第二个组没有匹配到任何数据,默认情况m.groups()的值为:(24, None);设置default情况下m.groups('0')返回值为:(24, '0')
match.
groupdict
(default=None)
>>> m2 = re.match(r"(?P<firstname>\w+) (?P<lastname>\w+)", "Malcolm Reynolds")
>>> m2.groupdict()
{'lastname': 'Reynolds', 'firstname': 'Malcolm'}
match.start([group])
返回某个组的start索引值,默认返回索引0
match.end([group])
返回某个组的end索引值,默认返回最后一个索引
match.
span
([group])
返回匹配到的某个组开始、结束索引值的二元组,相当与(match.start([group]), match.end([group]))
>>> m2 = re.match(r"(?P<firstname>\w+) (?P<lastname>\w+)", "Malcolm Reynolds")
>>> m2.start(1)
0
>>> m2.end(1)
7
>>> m2.start(2)
8
>>> m2.end(2)
16
>>> m2.span()
(0, 16)
>>> m2.span(1)
(0, 7)
>>> m2.span(2)
(8, 16)
match.
pos
获取本次匹配的原始字符串的其实位置
match.
endpos
获取本次匹配的原始字符串的最后位置
match.
lastindex
获取本次匹配到的最后一个组的索引
match.
lastgroup
获取本次匹配最后一个组的名称,如果没有匹配到或者没有组名返回None(组名即为(?P<name>)方式定义的组)
match.
re
获取本次匹配的正则表达式对象
match.
string
获取本次匹配的原始字符串