python代码正则表达式处理

python中正则表达式使用re模块进行处理

正则表达式的匹配规则可以参考上一篇博客内容https://blog.csdn.net/u013410838/article/details/104291214

目录

 

re模块常用方法如下:

re.compile

re.match

re.search

re.findall

re.finditer

re.split

re.sub

关于match模块的方法

match.group([group1, ......]):返回一个或多个匹配的组

match.groups(default=None)

match.groupdict(default=None)

match.start([group])

match.end([group])

match.span([group])

match.pos

match.endpos

match.lastindex

match.lastgroup

match.re

match.string


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

获取本次匹配的原始字符串

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值