.net 在未命名的组中迭代匹配
给出这样一个简单的正则表达式:.net 在未命名的组中迭代匹配,.net,regex,asp.net-4.0,.net,Regex,Asp.net 4.0,给出这样一个简单的正则表达式:^(\d+\d+\d+)(.*)和一个字符串,使用[$1]$2替换[15-APR-2012]@11:00:00将产生预期的[15-APR-2012]@11:00 我的问题是在调用Regex.Matches时,我在索引0处收到一个匹配项,整个字符串:15-APR-2012@11:00:00显示为匹配项。但实际上有两场比赛。我怎样才能同时得到这两条火柴?我应该看到索引0和索引12。我使用的代码来自另一个SO线程: // Get a collection of match
^(\d+\d+\d+)(.*)
和一个字符串,使用[$1]$2
替换[15-APR-2012]@11:00:00
将产生预期的[15-APR-2012]@11:00
我的问题是在调用Regex.Matches时,我在索引0处收到一个匹配项,整个字符串:15-APR-2012@11:00:00
显示为匹配项。但实际上有两场比赛。我怎样才能同时得到这两条火柴?我应该看到索引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处匹配^
- 正则表达式末尾的
将匹配字符串的其余部分,并且您将找不到任何重叠匹配,因此只能匹配一次。由于您没有对第二个捕获组执行任何操作,因此您可以从正则表达式中删除它*
…因此,尝试使用regex
(\d+\d+\d+
)并将其“工作”的regex的匹配项替换为[$1]
,但未报告第二次捕获。我只在方括号中显示1美元,然后显示2美元。我知道它捕获了它们,Matches()并没有同时报告它们,我也不明白为什么。你混淆了组和匹配。组是这样的括号之间的东西(组)。匹配是符合整个regexp的东西。当然,有一些方法可以不在其中任何一个字符串中包含匹配字符串的一部分。如何获得这些匹配?我是否需要对regex进行正则化,并为每个组分别进行呼叫?请编辑您的问题并将此信息添加到其中。无法在注释中读取源代码。已按要求将注释移动到post。