[英]Regex to capture IP address (S,G) multicast
此正则表达式用于捕获IP地址。 我需要一个捕获这种格式:
(1.1.1.1,230.1.1.1)
我如何找到合适的RegEx?
我想提取(S,G)为:
1.1.1.1 230.1.1.1
(...)
match = re.findall(r'^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$' , line)
(...)
您已经拥有一个IP地址的模式。 现在,你想找到一个括号对IP地址,你可以只重复模式,把,
之间和\\(
\\)
如果要搜索多行,可能需要添加多行标记(?m)
。 要实际捕获整个地址,您必须将其作为另一个组包围。 这将使:
match = re.findall(r'(?m)^\((((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(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}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?))\)$' , line)
for m in match:
S = m[0]
G = m[4]
print S, G
那当然很难看。 我们可以通过分解重复的部分来改进它,例如:
I = '(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)' # pattern for 1 to 255
IP = '(?:' +I+ '\.){3}' +I # pattern for IP address
SG = '(?m)^\((' +IP+ '),(' +IP+ ')\)$' # pattern for (S,G)
match = re.findall(SG, line);
for S, G in match:
print S, G
在这里我还插入了?:
在不需要检索的组中,以便只有IP地址保留在match
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.