2015-07-20 84 views
2

我有成千上萬的服務器名稱的條目的文件,但我想忽略任何服務器,如下圖所示:正則表達式搜索忽略單詞串

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

其數量的值不同,但字符留相同。

我嘗試下面的代碼,但它返回一個空的列表:如果我忽略上述服務器,我應該仍然得到大約3000服務器列表

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

。我究竟做錯了什麼?

+0

發送示例字符串以及預期輸出。 –

+0

@AvinashRaj在上面的列表中,我需要忽略上述服務器並獲取文件中的所有其他名稱,其中包含像pd7343.fdw.dee.corp這樣的服務器; ko8383.fdw.dee.corp – Deepak

回答

1

您需要使用負先行在開始掛靠:

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

demo

^錨開始從一個字符串(使用re.M,如果你需要搜索的開始搜索從一行的開始),那麼(?!...)前視將確保在開始時在交替組右邊沒有出現子字符串。公共部分 - dee.corp - 因爲它是一個共同的結局,所以不在該組中。

請注意,ao.d33fegd.ao.dee.corpao.d55fegd.ao.dee.corp遵循相同的模式,因此有可能更加縮短正則表達式。

1
^(?!(?:bnn[0-9]|ao.*|qrwafgwd[0-9]|kdgf[0-9]))\w+(?:\.wdf\.dee\.corp) 

試試這個。試試看.Escape的.

https://regex101.com/r/hF7zZ1/1

+0

謝謝,但在regex101.com網站[鏈接](https://regex101.com/r/hF7zZ1/1)服務器名稱被忽略,只有最後3個條目(。 wdf.dee.corp)會顯示出來,我如何調整代碼以獲得完整的fqdn名稱。 並感謝您的鏈接,這將有助於進一步學習。 – Deepak

+0

@Deepak確實接受它,如果它爲你工作 – vks