Negative Lookbehind不会否定整场比赛

时间:2017-11-18 21:29:19

标签: python regex negative-lookbehind

编辑:为了更准确地说,主机名可以出现在段落中的任何位置,我想完全丢弃任何以https://开头的主机(或http://实际上,但只是使用https://进行测试),我不想捕获他们的主机名,但我想捕获任何不以https://

开头的主机名

我无法使用负面的lookbehind工作的python正则表达式。我想匹配主机名,但不是以https://。

开头

匹配:caller.fls.help.test.com https://dont-want.fls.help.test.com

我建立的正则表达式是:

((?<!https:\/\/)([a-zA-Z0-9_-]+?)(\.\w{3})?
(\.help\.test\.com|\.remote\.help\.test\.com))

不幸的是,这仍然与我的例子中的“aller.fls.help.test.com”相匹配。你可以在这里看到:

enter image description here

如何让消极的外观取消整场比赛?谢谢!

2 个答案:

答案 0 :(得分:0)

这样做你想要的吗?我锚定了比赛的开始和结束,以便从头到尾考虑整条线。

(\n|^)((?<!https:\/\/)([a-zA-Z0-9_-]+?)(\.\w{3})?(\.help\.test\.com|\.remote\.help\.test\.com))(\n|$)

答案 1 :(得分:0)

如果所有主机都作为单个字符串进入,我建议另一个approch:查看字符串中是否包含“https” - 如果不是,请比较主机名。

看起来像这样:

hosts = ['caller.fls.help.test.com','https://caller.fls.help.test.com']

for host in hosts:
    if 'https' not in host:
        #Your match-regex