2012-01-26 66 views
1

請在這裏給個建議:C#的正則表達式

我嘗試在C#中做一個正則表達式。這裏是文字

E1A: pop(+) 
call T 
call E1 
E1B: return 
TA: call F 
call T1 

我要像這樣分割:

1) 
E1A: pop(+) 
call T 
call E1 

2) 
E1B: return 

3) 
TA: call F 
call T1 

我在回顧後因子評分,但它不是因爲工作+

這裏是我的希望。工作但它不:

"[A-Z0-9]+[:].+(?=([A-Z0-9]+[:]))" 

有沒有人有更好的ideea?

編輯:「E1A」,「E1B」,「TA」正在改變。所有它仍然是相同的是,它們是由字母製成,產品編號爲經「:」

+0

「E1A」,「E1B」和「TA」常量?或者這些價值觀是否改變,或者它們是否違規?您尚未明確定義要捕獲的規則。 – qJake

+0

「E1A」,「E1B」,「TA」正在改變。它們仍然是一樣的,他們是由字母和數字後面跟着「:」 – Gigg

+0

線斷裂是否一致?你會總是有「\ r \ n <序列的字母/數字>:<序列的字母/數字跨越多行>」? – qJake

回答

3
Regex regexObj = new Regex(
    @"^    # Start of line 
    [A-Z0-9]+:  # Match identifier 
    (?:    # Match... 
    (?!^[A-Z0-9]+:) # (unless it's the start of the next identifier) 
    .    # ... any character, 
    )*    # repeat as needed.", 
    RegexOptions.Singleline | RegexOptions.Multiline | RegexOptions.IgnorePatternWhitespace); 
allMatchResults = regexObj.Matches(subjectString); 

現在allMatchResults.Count將包含匹配的數量在subjectString,並allMatchResults.Item[i]將包含i次比賽。

+0

它正在工作。你能解釋一下它的含義嗎?我的意思是我知道(?:...)與正則表達式匹配,但它不是返回,但剩下的?非常感謝你 – Gigg

+0

:)):))正是我所要求的。謝謝 – Gigg