2016-12-01 70 views
0

我有以下输入:如何使用C#中REGEX捕获的命名组提取值?

.....a whole bunch of stuff before.... 
The Key(s): FOO-1234, FOO-125, FOO-859 
The Key(s): FOO-5364 
.....a whole bunch of stuff after.... 

我需要能够例如捕获所有的4个按键FOO-1234,FOO-125,FOO-859FOO-5364

目前我使用的模式:

var regex = new Regex(@"The Key\(s\): ((?<key>FOO-\d+)(,)?)+"); 
regex.Match(input).Dump(); 

我想获得的值相匹配的所有密钥,但即使上述匹配的输入,但MatchResultGroup物业似乎并不具备密钥正确捕获。

任何帮助,非常感谢。

+2

而不是使用它看来,你根本不了解它的正则表达式,请尝试使用string.Split其作用是多更容易,直到你更熟悉RegEx – MethodMan

+0

这有帮助吗?我特别提出了一个关于'REGEX'的问题,我没有在使用'string.split'寻找替代解决方案的建议。 – MaYaN

+2

好的,那么如何使用['Regex.Split'](https://msdn.microsoft.com/en-us/library/ze12yx1d(v = vs.110).aspx)? – Quantic

回答

1

好吧,事实证明,我不得不看Caputures,而不是Groups

foreach (Match match in regex.Matches(input)) 
{ 
    match.Groups["key"].Captures.Dump(); 
} 
+1

是吗?测试[这里](https://regex101.com/)表明你至少需要摆脱'Key(s)'中的假设,否则你只需为“s”创建另一个捕获组。 – Quantic

+0

是的,您是对的,我在撰写问题时错过了逃跑,现在我已经更新了它。 – MaYaN