Python的re.rearch()和group()详解, 及它们的综合使用

re.search(字符串1,字符串2,flags=0):以列表形式,返回在字符串2中所有匹配到的第一个字符串1,如果无,则返回空列表,其中flag参数一般很少使用
补充:
re.seaech(), re.findall(), re.match 等方法都有第三个参数flags,其为正则表达式修饰符 - 可选标志
正则表达式可以包含一些可选标志修饰符来控制匹配的模式。修饰符被指定为一个可选的标志。
多个标志可以通过按位 OR(|) 它们来指定。如 re.I | re.M 被设置成 I 和 M 标志:

修饰符 描述
re.I 使匹配对大小写不敏感
re.L 做本地化识别(locale-aware)匹配
re.M 多行匹配,影响 ^ 和 $
re.S 使 . 匹配包括换行在内的所有字符
re.U 根据Unicode字符集解析字符。这个标志影响 \w, \W, \b, \B.
re.X 该标志通过给予你更灵活的格式以便你将正则表达式写得更易于理解

列表.group(num=0),可以理解为获取某个分组内容,group()在正则表达式中与re.search()结合,用于获取分段截获的字符串

例子1:

import re
a = "123abc456"
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0)    #123abc456,返回整体
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1)    #123
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2)    #abc
print re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3)    #456

分析:
可以看出,正则表达式按照数字-字母-数字的顺序来获取相应字符串,那么分别就是“数字(group(1))–字母(group(2))–数字(group(3))”的对应关系,
其中,group(0)和group()效果相同,均为获取取得的字符串整体。

例子2:

import re
ret=re.search("(?P<name>[a-z]+)\d+","alex36wusir34xialv33").group()#==group(0)
print(ret)
#输出结果:alex36

分析:
一个()是一个组,?P<>表示给组命名,name表示组名,alex为()分的一个组,alex的组名就是name
group()=group(0),便是整体字符串,因为在search中,根据search里的条件,alex36就为一个整体

例子3:

import re
ret=re.search("(?P<name>[a-z]+)\d+","alex36wusir34xialv33").group('name')
print(ret)
#输出结果:alex

分析:
在alex36这个组里查到name这组内容,即alex

例子4:

import re
print(re.search("(?P<name>[a-z]+)(?P<age>\d+)","alex36wusir34xialv33").group())
print(re.search("(?P<name>[a-z]+)(?P<age>\d+)","alex36wusir34xialv33").group('name'))
print(re.search("(?P<name>[a-z]+)(?P<age>\d+)","alex36wusir34xialv33").group('age'))
print(re.search("(?P<name>[a-z]+)(?P<age>\d+)","alex36wusir34xialv33").group(1))
print(re.search("(?P<name>[a-z]+)(?P<age>\d+)","alex36wusir34xialv33").group(2))
#输出结果:
#alex36
#alex
#36
#alex
#36

分析:
整体字符串为alex36,组名为name的组的内容为alex,组名为age的组的内容为36
第一组为alex,第二个组为age

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值