目录:
1、re模块中的常用函数
(1)search
(2)match
(3)split
(4)sub
(5)compile
re模块提供了一组正则处理函数,使我们可以在字符串中搜索匹配项+:
| |
| 按指定的正则模式查找文中所有符合正则模式的匹配项,以列表格式返回结果。 |
| 在字符串中任何位置查找首个符合正则模式的匹配项,存在则返回re.Match对象,不存在返回None。 |
| 判定字符串开始位置是否匹配正则模式的规则,匹配则返回re.Match对象,不匹配返回None。 |
| 按指定的正则模式来分割字符串,返回一个分割后的列表。 |
| 把字符串按指定的正则模式查找符合正则模式的匹配项,并可以替换一个或多个匹配项成其他内容。 |
| compile方法用于编译正则表达式模式,从而生成一个正则表达式对象。这个对象可以重用,使得在多个匹配操作中更高效。 |
创建一个log1.log
INFO: System startedERROR: Could not connect to databaseWARNING: Low disk spaceERROR: File not found
import rewith open(r"mypackage\log1.log") as f: logs_text = f.read()print("logs_text:::", repr(logs_text))# (1)查询所有ERRORret = re.findall("ERROR:.*", logs_text)print(ret)print("下面是search输出结果")print("------------------------")# (2)查询第一个ERROR# 匹配成功,返回的是一个match对象,否则,返回一个Noneret1 = re.search("ERROR:.*", logs_text)print(ret1)print(ret1.span())print(ret1.start())print(ret1.end())print(ret1.group())
import retext = """服务器的IP地址如下:主服务器:192.168.1.1备用服务器:10.0.0.5外部服务器:172.16.254.1无效IP:256.100.50.25和192.168.1.256"""# 匹配所有ipret = re.findall(r"\b(?:\d{1,3}\.){3}\d{1,3}\b",text)print(f"用findall匹配所有ip:{ret}")ret = re.search(r"\b(?:\d{1,3}\.){3}\d{1,3}\b",text)print(ret)print("用search匹配首个符合的ip", ret.group())# 有名分组# 匹配第一个外部服务器IP地址print("search指定一个ip")print("-------------------------")ret2 = re.search(r"外部服务器:\b(?P<outer_ip>(?:\d{1,3}\.){3}\d{1,3})\b", text)print(ret2)print(ret2.group())print(ret2.group("outer_ip"))
import retext = """服务器的IP地址如下:主服务器:192.168.1.1备用服务器:10.0.0.5外部服务器:172.16.254.1无效IP:256.100.50.25和192.168.1.256"""ret1 = re.search(r"^外部服务器:\b(?P<outer_ip>(?:\d{1,3}\.){3}\d{1,3})\b", text)print(ret1)# match的效果相当于search前面加了个^ret2 = re.search(r"外部服务器:\b(?P<outer_ip>(?:\d{1,3}\.){3}\d{1,3})\b", text)print(ret2)print(ret2.group())print(ret2.group("outer_ip"))
import res = "yuan,rain,eric"print(s.split(","))s = "yuan rain eric alvin"ret = re.split(r"\s+", s)print(ret)
import re# sub将多个字符替换成一个,下面是多个空格替换成单空格txt = "my name is ooaac"ret = re.sub(r"\s+", repl=" ", string=txt)print(ret)
import res = "15100649928,123@qq.com,+8613653287791,666@163.com"ret = re.findall(r"(?:\+86)?1[3-9]\d{9}",s)print(f"用findall筛选出的结果:{ret}")s1 = "15100649928,123@qq.com,+8613653287791,666@163.com"s2 = "15144449928,123@qq.com,+8613222228791,666@163.com 13622227791"s3 = "15100655928,123@qq.com,+8613677787791,666@163.com"reg_compile = re.compile(r"(?:\+86)?1[3-9]\d{9}")ret1 = reg_compile.findall(s1)print(ret1)ret2 = reg_compile.findall(s2)print(ret2)ret3 = reg_compile.findall(s3)print(ret3)