match对象
属性
- pos : 目标字符串的开头位置
- endpos : 目标字符串结束位置
- re : 正则表达式对象
- string : 目标字符串
- lastgroup:最后一组名字
- lastindex:最后一组是第几组
属性方法
- span() 获取匹配到的内容的起止位置
- start() 获取匹配到的内容的开始位置
- end() 获取匹配到的内容的结束位置
- group(n = 0)
- 功能: 获取match对象对应匹配到的内容
参数: 默认为0表示获取正则表达式整体的匹配内容
如果赋值1,2,3…则表示获取某个子组的匹配内容
返回值:返回匹配字符串
- 功能: 获取match对象对应匹配到的内容
- groups() 获取所有子组匹配到的内容,形成一个元组
- groupdict() 获取所有捕获组匹配内容,形成一个字典
import re pattern = r'(?P<dog>ab)cd(?P<pig>ef)' regex = re.compile(pattern) #获取match对象 obj = regex.search("abcdefghijklmn",0,8) #match对象属性 print(obj.pos) #目标字符串的起始位置 print(obj.endpos) #目标字符串的结束位置 print(obj.re) #正则表达式 print(obj.string) #目标字符串 print(obj.lastgroup) #最后一组的名称 print(obj.lastindex) #最后一组是第几组 print("====================================\n") print(obj.span()) # 匹配到内容的起止位置 print(obj.start()) # 匹配到内容的开始位置 print(obj.end()) # 匹配到内容的结束位置 print(obj.group()) print(obj.group(2)) print(obj.groups()) #所有子组匹配内容 print(obj.groupdict()) #捕获组字典 #打印结果如下 0 8 re.compile('(?P<dog>ab)cd(?P<pig>ef)') abcdefghijklmn pig 2 ==================================== (0, 6) 0 6 abcdef ef ('ab', 'ef') {'dog': 'ab', 'pig': 'ef'}
flags参数
- re.compile re.findall re.search re.match re.finditer re.fullmatch re.sub re.subn re.split
- 作用:辅助正则表达式,扩展丰富匹配内容
- I == IGNORECASE 忽略字母大小写
import re regex = re.compile(r'hello',re.I) l = regex.findall('hello Hello') print(l) #['hello', 'Hello']
- S == DOTALL 元字符.可以匹配\n
import re regex = re.compile(r'hello',re.I) s = '''hello world nihao Beijing''' l = re.findall(r'.+',s) print(l) l = re.findall(r'.+',s,re.S) print(l) #['hello world', 'nihao Beijing'] #['hello world\nnihao Beijing']
- M == MULTILINE 元字符 ^ $能匹配每一行的开头结尾
import re s = '''hello world nihao Beijing''' obj = re.search(r"world$",s,re.M) print(obj.group()) #匹配每一行的结尾或者开头
- X == VERBOSE 可以给正则添加注释
import re regex = re.compile(r'hello',re.I) pattern = r"""(?P<dog>\w+) #dog组 \s+ #匹配任意多个空格 (\W+) #匹配一些特殊字符 """ #添加注释同时忽略大小写 s = re.match(pattern,'hello %#@',re.X | re.I).group() print(s) #hello %#@
同时使用多个flag 用 |
re.I | re.S
要求:
- 编写一个程序接口,通过传入端口名称可以获取地址信息
- 文档特征:每个端口占一段,每段之间有空行,端口名称为每段的首个单词
文档点击查看
解析:import re import sys def getAddress(port): f = open('1.txt') while True: data = '' #获取每一段内容 for line in f: if line != '\n': data += line else: break #文件结尾跳出循环 if not data: break #匹配到每段的首个单词 PORT = re.match(r'\S+',data).group() #判断是否为目标段 if PORT == port: pattern = r'address is (\w{4}\.\w{4}\.\w{4})' addr = re.search(pattern,data).group(1) return addr if __name__ == "__main__": port = sys.argv[1] print(getAddress(port))