【问题标题】:Match.Groups[].Value returns repeated valuesMatch.Groups[].Value 返回重复值
【发布时间】:2011-07-24 00:25:04
【问题描述】:

输入是55,我的正则表达式是^(5{2})$。所以理想情况下(至少对我来说)这应该返回每个以 5 开头并以 5 结尾的字符串,对吧?

但是当我的c#如下:

Match match = Regex.Match(input, String.Format(@"{0}", regex));
string outcome = null;

if (match.Success)
{
    for (int i = 0; i < match.Groups.Count; i++)
    {
        outcome += match.Groups[i].Value;
    }
}

为什么我的字符串 outcome 返回 5555 而不是 55?

当我从正则表达式中删除括号时,它可以完美运行。

【问题讨论】:

  • 为什么需要拨打String.Format(@"{0}", regex)?为什么不能自己传递正则表达式字符串?
  • 啊,我正要添加 /{0}/gi 但我忘记了。我正在从文本输入生成正则表达式,我希望有一个默认值以避免重新输入
  • 另外,您的正则表达式并不匹配以 5 开头并以 5 结尾的每个字符串。它只匹配 exact 字符串 "55"。你想要的正则表达式(没有捕获)是^5.*5$

标签: c# regex match regex-group


【解决方案1】:

match.Groups 中的第一项包含您的正则表达式选择的整个匹配项。第二项是括号中的内容。

由于正则表达式和输入本质上是相同的字符串"55",因此您会得到两个相同的匹配项:一个用于匹配的整个输入,另一个用于捕获组(括号)。

这两个被连接起来,你得到"55" + "55",即"5555"

【讨论】:

  • 谢谢,我明白了:) 但是,如果我想检索字符串中的所有匹配项怎么办?假设我想要我问的问题中的每个“a”字符。我该怎么做?
  • @Shaokan:你想改用Regex.Matches()(注意复数)。
  • 是的,我正要写我找到了解决方案 :) 谢谢 BoltClock :)
猜你喜欢
  • 2019-11-24
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
  • 2015-07-25
相关资源
最近更新 更多