正则表达式搜索忽略字符串中的单词

标签 regex python-2.7

我有一个包含数千个服务器名称条目的文件,但我想忽略任何服务器,如下所示:

bnn6122.fdw.dee.corp;
ao.d33fegd.ao.dee.corp;
ao.d55fegd.ao.dee.corp;
qrwafgwd00846.fdw.dee.corp;
kdgf9934.wdf.dee.corp

它们的数字值不同,但字符保持不变。

我尝试了以下代码,但它返回一个空白列表:

re.findall(r'^(?!bnn[0-9]|^ao*|^qrwafgwd[0-9]|^kdgf[0-9])\w+(.wdf.dee.corp)', f, re.M|re.I)

如果我忽略上述服务器,列表中仍应有大约 3000 个服务器。我做错了什么?

最佳答案

您需要在开始时使用否定的前瞻:

^(?!(?:bnn\d+\.fdw|ao\.d\d+fegd\.ao|qrwafgwd\d+\.fdw|kdgf\d+\.wdf)\.dee\.corp)

参见demo

^ anchor 从字符串的开头开始搜索(如果需要从行的开头搜索,请使用 re.M),然后 (?!...) 前瞻将确保交替组中从一开始就没有出现子字符串。共同部分 - dee.corp - 不属于该组,因为它是一个共同结局。

请注意,ao.d33fegd.ao.dee.corpao.d55fegd.ao.dee.corp 遵循相同的模式,因此可以缩短正则表达式更多。

关于正则表达式搜索忽略字符串中的单词,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31509745/

相关文章:

python-2.7 - 在 jupyter 中导入 unicodecsv 失败

python-2.7 - 使用 scrapy 从 Flipkart 上抓取数据

Python:用英语替换法语字母

JavaScript 电子邮件验证无法正常工作,帮忙吗?

c# - 正则表达式查找所有子串和最长子串

python - 以不同的顺序检索多个捕获组?

python - 在 Python 中使用 with 运算符关闭文件

javascript - 使用 javascript 正则表达式链接多个没有空格的主题标签

正则表达式匹配不包含特定 HTML 标记的字符串

python - 从 dict 中检索对象,以便可以通过 json.dumps() 轻松转储该对象