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

标签 python regex

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

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

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

这匹配正确的是:

10.179.12.241::CALMGTVCSRM0210

这匹配但不应该:

10.179.12.241::CALMGTVCSRM0210:as

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

最佳答案

.+ pattern 匹配除换行符以外的 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 demo (IP regex source)。 (?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)匹配来自 0 的单个八位字节至 255(?:\.<octet_pattern>){3}匹配三个重复的点和八位字节模式。

关于python - 冒号出现后需要表达式不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54558423/

相关文章:

python - 限制正则​​表达式中的位数

c# - 正则表达式匹配整数

正则表达式:查找字符串中的重复项

python - 在 python 中以字符串形式输入目录

python - 搜索 csv 的值,代码在 ipython 中有效,但在程序中使用时无效

python嵌入: passing list from C to python function

c# - System.Text.RegularExpressions.Regex.Matches 的性能特征 - 一个错误?

Python:如何连接字符串和 Unicode?

python - 教我 pandas dataframe 的方法来做到这一点?

java - 在java中使用正则表达式