Python 使用regex module和.group()对匹配的值进行分组
我的文本文件“reg1.txt”如下所示:Python 使用regex module和.group()对匹配的值进行分组,python,regex,Python,Regex,我的文本文件“reg1.txt”如下所示: import re import os f1=open("reg1.txt","r") for line in f1: rx=re.search("(\d{1,3}.){3}\d{1,3}",line) print(rx) f1.close() f2=open("reg1.txt","r") for line in f2: rx
import re
import os
f1=open("reg1.txt","r")
for line in f1:
rx=re.search("(\d{1,3}.){3}\d{1,3}",line)
print(rx)
f1.close()
f2=open("reg1.txt","r")
for line in f2:
rx=re.search("(\d{1,3}.){3}\d{1,3}",line)
if rx:
print(rx.groups())
f2.close()
Python培训进展顺利,我们正在连接具有IP的服务器
192.168.101.124对于Python,我的电子邮件id是john1@xyz.com将此电子邮件用于官方用途。
Python服务器IP为101.201.17.155用于城市一校区Python服务器IP为101.201.101.5用于城市两校区我的朋友电子邮件id为peter1@xyz.com将此电子邮件用于官方用途。我的经理电子邮件id是cooldude@xyz.com将此电子邮件用于官方用途。PYTHON服务器IP为173.101.255.15,用于Citythree园区;测试服务器IP为95.101.175.101,用于Citythree园区
问题是要找到文件中的所有IP。
我的代码如下:
import re
import os
f1=open("reg1.txt","r")
for line in f1:
rx=re.search("(\d{1,3}.){3}\d{1,3}",line)
print(rx)
f1.close()
f2=open("reg1.txt","r")
for line in f2:
rx=re.search("(\d{1,3}.){3}\d{1,3}",line)
if rx:
print(rx.groups())
f2.close()
我的控制台显示结果:
<re.Match object; span=(38, 53), match='192.168.101.124'>
None
<re.Match object; span=(34, 48), match='101.201.17.155'>
<re.Match object; span=(20, 33), match='101.201.101.5'>
None
None
<re.Match object; span=(24, 38), match='173.101.255.15'>
<re.Match object; span=(25, 39), match='95.101.175.101'>
('101.',)
('17.',)
('101.',)
('255.',)
('175.',)
没有一个
没有一个
没有一个
('101.',)
('17.',)
('101.',)
('255.',)
('175.',)
当匹配显示ip地址的完整范围时,为什么代码只打印匹配对象的第三部分
如何打印整个IP地址?使用打印(rx.group())
而不是打印(rx.group())
groups(默认值=None)返回一个包含匹配的所有子组的元组,
从1到模式中的多个组
但是在您的例子中,您只捕获了1个组,即(\d{1,3})。
使用打印(rx.group())
代替打印(rx.group())
groups(默认值=None)返回一个包含匹配的所有子组的元组,
从1到模式中的多个组
但是在您的例子中,您只捕获了1个组,即(\d{1,3})。
您可以将文件读入一个变量,然后运行对
re.findall
的单个调用:
import re
rx = r"(?<!\d)(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}(?!\d)"
with open("reg1.txt","r") as f1:
contents = f1.read() # Read the file into contents variable
print(re.findall(rx, contents)) # Extract all IPs
重新导入
rx=r“(?您可以将文件读入一个变量,然后运行一个调用re.findall
:
import re
rx = r"(?<!\d)(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)(?:\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}(?!\d)"
with open("reg1.txt","r") as f1:
contents = f1.read() # Read the file into contents variable
print(re.findall(rx, contents)) # Extract all IPs
重新导入
rx=r“(?尝试将第一个字符设置为不匹配的组,并使用原始字符串而不是常规字符串。为了安全起见(实际上,它将匹配任何字符,而不仅仅是点):r'(?:\d{1,3}\){3}\d{1,3}“
匹配任何字符。您需要将其转义以匹配文字
检查尝试将第一个字符设置为不匹配的组,并使用原始字符串而不是常规字符串。为了安全起见,可能会转义点(因为它将匹配任何字符,而不仅仅是点):r'(?:\d{1,3}\){3}\d{1,3}“
匹配任何字符。您需要将其转义以匹配文本
检查这是否有用!我特别关心组()的问题。谢谢!@SUDIPTASAMAL没有问题。re.search
只获取第一个匹配项,您需要多个匹配项,可以使用re.findall
或re.finditer
.groups
仅获取从匹配数据对象捕获的子字符串。我使用了“全部查找”。我正在玩“搜索”这就上升了。所以我发布了它。Findall有更大的范围和更多的功能。谢谢你的支持input@SUDIPTASAMAL这很有帮助!我特别关心小组的问题()。谢谢!@SUDIPTASAMAL没有问题。re.search
只获取第一个匹配项,您需要多个匹配项,可以使用re.findall
或re.finditer
.groups
仅获取从匹配数据对象捕获的子字符串。我使用了“全部查找”。我正在玩“搜索”这就上升了。所以我发布了它。Findall有更大的范围和更多的功能。谢谢你的支持input@SUDIPTASAMALA.groups
返回包含匹配的所有子组的元组,从1到模式中的组数。groups
返回包含匹配的所有子组的元组,从1到howe许多团体都在这种模式中。