我似乎無法弄清正則表達式(.net)中的捕獲+組。正則表達式:捕獲,組,混淆
比方說,我有以下的輸入字符串,其中每個字母實際上是更復雜的正則表達式的佔位符(這麼簡單的字符排除將無法正常工作):
CBDAEDBCEFBCD
或者更一般地,這裏寫在「正則表達式」的字符串圖案:
(C|B|D)*A(E*)(D|B|C)*(E*)F(B|C|D)*
只會有一個A和一個F. 我需要捕獲作爲單獨的「捕捉」(或匹配或基團)B的所有情況下,C,d (在我的應用程序中是更復雜的組)在A之前和F之前。我也需要A和F.我不需要E.而且我不需要在A之前的C,B,D或者在F.之後的B,C,D。
我會期待正確的結果是:
Groups["start"] (1 capture) = A
Groups["content"] (3 captures)
Captures[0] = D
Captures[1] = B
Captures[2] = C
Groups["end"] (1 capture) = F
我試了幾次微弱的嘗試,但沒有一個工作。
僅「不正確」捕獲在上面的樣本串EF之前的最後一個C(以及正確啓動= A,端= F)
(?<=(?<start>A)).+(?<content>B|C|D).+(?=(?<end>F))
相同的結果與上述(只是增加了一個+後( ?B | C | d))
擺脫環視東西...同樣的結果如上
(?<start>A).+(?<content>B|C|D)+.+(?<end>F)
然後我摹無所作爲的大腦繼續罷工。
那麼,解決這個問題的正確方法是什麼?是否真的需要環視?
謝謝!
真的!所以不需要lookaround呃...太棒了。 – Jimmy 2010-10-01 00:44:17
@Jimmy:在這種情況下,是的,不需要lookarounds。但他們確實有他們的用途。 :P – 2010-10-01 09:04:45