首页 > 解决方案 > 冒号出现后需要表达式不匹配

问题描述

因此,我有一个名称列表,并希望以适当的格式过滤掉这些名称。作为参考,我需要的格式是 IP::hostname。这是我目前拥有的正则表达式:

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

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

这匹配正确:

10.179.12.241::CALMGTVCSRM0210

这匹配但不应该:

10.179.12.241::CALMGTVCSRM0210:as

关于如何修改我的表达式以不匹配主机名后的任何冒号的任何帮助将不胜感激

标签: pythonregex

解决方案


.+模式尽可能多地匹配除换行符之外的 1 个或多个字符,因此匹配允许它们的冒号。您需要一个否定字符类, [^:]*,它将匹配除冒号以外的 0+ 个字符。

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

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

查看正则表达式演示

为了确保您想要匹配您宁愿使用的有效 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$

请参阅另一个正则表达式演示IP 正则表达式源)。(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)匹配单个八位组 from 0to255(?:\.<octet_pattern>){3}匹配三个重复的点和八位组模式。


推荐阅读