给出一个像这样的简单RegEx:^(\d+\D+\d+)(.*)
和一个要解析为15-APR-2012 @ 11:00:00
的字符串,使用[$1]$2
替换[15-APR-2012] @ 11:00:00
按预期方式生成。
我的问题是在调用Regex.Matches时,我在索引0处收到一个匹配项,整个字符串:15-APR-2012 @ 11:00:00
显示为匹配项。但真的有2场比赛。我怎样才能得到两场比赛?我应该看到索引0和索引12.我正在使用的代码来自另一个SO线程:
// Get a collection of matches.
MatchCollection matches = Regex.Matches(inPutString, regexptrn);
foreach (Match match in matches)
{
foreach (Capture capture in match.Captures)
{
retVal += String.Format("Index={0}, Value={1}", capture.Index, capture.Value) + Environment.NewLine;
}
}
我对.Matches()确实有什么错误的想法吗?
行。这是一个跟进相同的字符串,新的正则表达式“(..)(...)”替换为[$ 1] {$ 2}结果 [10] { - AU} [G - ] {201} [2] {@ 1} [1:] {45:} 38我们期待这一点。
然而匹配给出了这个:
Index=0, Value=10-AU
Index=5, Value=G-201
Index=10, Value=2 @ 1
Index=15, Value=1:45:
这表明Matches会查看整个模式而不是其组。现在如何获得小组赛
答案 0 :(得分:1)
当前正则表达式永远无法获得多个匹配的原因有两个:
^
是字符串开头的锚点,所以你需要删除它,否则你的正则表达式只能匹配索引0。.*
将与字符串的其余部分匹配,您将找不到任何重叠匹配,因此您只能匹配一次。既然你没有对第二个捕获组做任何事情,你可以从你的正则表达式中删除它。 ...请尝试使用正则表达式(\d+\D+\d+)
并将匹配项替换为[$1]
。