冒号出现后需要表达不匹配

时间:2019-02-06 16:37:04

标签: python regex

所以我有一个名称列表,想用正确的格式过滤掉它们。作为参考,我需要的格式是IP :: hostname。这是我目前拥有的正则表达式公式:

^\d+(\.|\:)\d+\.\d+\.\d+::.+\w$

但是,我需要对其进行修改,以便在主机名中或主机名之后有任何冒号(:),以使其与表达式不匹配:

这与正确的匹配:

10.179.12.241::CALMGTVCSRM0210

此匹配但不应该匹配:

10.179.12.241::CALMGTVCSRM0210:as

在主机名显示后如何修改表达式以使其不匹配任何冒号的任何帮助

1 个答案:

答案 0 :(得分:1)

.+模式尽可能地匹配除换行符以外的1个或多个字符,从而匹配允许它们的冒号。您需要一个negated character class[^:]*,该匹配的冒号将与0个以上的字符匹配。

您可以使用以下方法修复正则表达式(并增强一点)

^\d+[.:]\d+\.\d+\.\d+::[^:]*\w$
                       ^^^^^

请参见regex demo

为确保要匹配有效的IP,您宁愿使用

^(?: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}::[^:]*\w$

请参见another regex demoIP regex source)。 (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)匹配一个从0255的八位字节,(?:\.<octet_pattern>){3}匹配一个点和一个八位字节图案的三个重复。