如果单词排成一行,则Python正则表达式不匹配

时间:2015-10-06 15:20:46

标签: python regex ansible

我正在创建一个Ansible游戏,其中包括为CSF的配置文件添加特定的端口范围。

文件中的字符串如下所示:

TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995,2077,2078,2082,2083,2086,2087,2095,20960"

我需要一个匹配以“TCP_IN =”开头的行的正则表达式 IF 它已经不包含端口范围。例如。这应该匹配:

portrange = 3000:5000

TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995,2077,2078,2082,2083,2086,2087,2095,20960"

但这不应该匹配:

TCP_IN = "20,21,22,25,53,80,110,143,443,465,587,993,995,2077,2078,2082,2083,2086,2087,2095,20960,3000:5000"

如果端口范围出现在字符串的开头或中间,则同样如此。

有办法做到这一点吗?

1 个答案:

答案 0 :(得分:1)

你可以尝试这种基于正则表达式的负向前瞻:

\bTCP_IN\s+=\s+"(?![\d,:]*?\b3000:5000\b)[\d,:]+"

RegEx Demo

在python中使用:

regex = re.compile(ur'\bTCP_IN\s+=\s+"(?![\d,:]*?\b3000:5000\b)[\d,:]+"')

Regex不对端口进行任何验证,它只允许在输入中使用数字OR逗号或冒号。