繁体   English   中英

正则表达式捕获IP地址(S,G)多播

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM