2016-08-18 54 views
-1

我無法弄清楚如何僅匹配包含某個單詞的組(如'test',例如下面)。這是一個很大的文本文件,組以一行' x'開頭,包含空行分隔到下一組的文本。我想我需要使用前視和後視,但不知道如何。我可以使用vb.net,但是試圖在正則表達式測試器中測試不同的表達式,並且無法獲取任何地方。正則表達式:只匹配嵌入了特定單詞的組

Group 1 
adfdf 
dd test ddfdf 
dfdfadf 

Group 2 
ddfadfa 

Group 3 
add test 
adfdff 

Group 4 
adfdf 

預期的2場比賽:

Group 1 
adfdf 
dd test ddfdf 
dfdfadf 

Group 3 
add test 
adfdff 
+0

不知道如何改寫的問題。我具體說明了文本文件的外觀以及我期望的結果。我在下面得到了一個答案。謝謝 – cyberdog

回答

0

^Group \d+$啓動模式,並與(?:^$|\Z)結束。在中間的比賽中test,但沒有前面有空行$(?:.(?!^$)(有關後者如何工作的詳細信息,請參閱Regular expression to match a line that doesn't contain a word?)。不要忘了ms修飾符:

^Group \d+$(?:.(?!^$))*?test.*?(?:^$|\Z) 

演示:https://regex101.com/r/kM9qB3/2

+0

你是個天才!這工作,我需要研究這是如何工作的。我認爲我需要一些這樣的lookarounds。我檢查了網頁,找不到與此謎題有關的任何內容。也許有人問過,不確定。我仍然在學習正則表達式,似乎也有不同的解決方案。我不確定是否有其他人,但它的工作原理。謝謝 – cyberdog

+0

我剛剛注意到,如果單詞測試是在最後的組部分,那麼它不匹配它。它正確匹配所有其他組。 – cyberdog

+0

更新答案以解決最後一組問題。關閉模式應該是「空線或整個文本的結尾」 - '(?:^ $ | \ Z)' –