2012-01-26 65 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