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