2016-04-25 66 views
-3

我想找到多行文本字符串cckk末開始,並且必須包括字符串c3c4,但不能包含字符串ddee,下面的測試數據:誰能幫我寫一個正則表達式?

t1 b1 cc 
c3 c4 z1 
t3 dd kk 

t4 b2 cc 
c4 c3 z2 
t6 ee kk 

t7 b3 cc 
c3 c4 z3 
t9 ff kk 

t7 b3 cc 
c4 c3 z3 
t9 ff kk 

預期結果只有:

cc 
c3 c4 z3 
t9 ff kk 

cc 
c4 c3 z3 
t9 ff kk 

我寫了一個正則表達式(C#),但預計不會這樣的結果。

回答

2

您需要使正則表達式引擎在匹配每個單個字符之前檢查條件。

@"(?s)\bcc\b(?:(?!dd|ee).)*?\bkk\b" 

DEMO

(?:(?!dd|ee).)*?應匹配任何字符,但不的ddee,零次或多次(非貪婪地)。 \

更新:

(?s)\bcc\b(?:(?!\bdd\b|\bee\b).)*?\bc3\b(?:(?!\bdd\b|\bee\b).)*?\bkk\b 
+0

@MikeMB補充了一下。您可以在我附加的演示鏈接的右側看到每個正則表達式模式的解釋。如果對此解釋有任何疑問,請隨時詢問我.. –

+0

非常感謝 –

+0

以獲得更高的準確性,'@「(?s)\ bcc \ b(?:(?!\ b(?:dd | ee )\ b)。)*?\ bkk \ b「' –

1

試試這個

cc(?:\s(?!dd|ee)\w{2})*\skk 

Regex demo

說明:
(?: …):非捕獲組sample
\s: 「空白字符」:空格,製表符,換行符,回車,垂直製表sample
(?!…):負先行sample
|:輪換/ OR操作數sample
\w: 「單詞字符」:ASCII字母,數字或下劃線sample
*:零或更多次sample

(?!dd|ee)\w{2} 2字符,但ddeesample