C#正则表达式 - 不匹配我的字符串

时间:2011-12-23 18:40:07

标签: c# regex string match

我在C#上使用带有WinForms的.NET 2.0。我正在使用正则表达式的一个大问题。我正在尝试在一个简单的字符串中为4个或更多字母单词添加冒号。它应该只添加冒号一次,之后代码不应再附加。

Regex lbls = new Regex(@"^\s*(?<lbl>[A-Za-z0-9_]{4,})", RegexOptions.Multiline); // Use a regex to obtain all 4 letter words in string
MatchCollection matches = lbls.Matches(text); // text is my string

foreach (Match m in matches)
{
  string mm = m.Groups["lbl"].Value; // Matches are stored in this group.
  if (!Regex.IsMatch(text, @"^\s*\b" + mm + @":\b", RegexOptions.Multiline))
  {
    text = Regex.Replace(text, @"\b" + mm + @"\b", mm + ":", RegexOptions.Multiline);
  }
}

假设字符串是“TEST”。这意味着输出应该是“TEST:”。但是,如果再次运行代码,则文本应保持“TEST:”但不是,而是“TEST ::”。冒号继续添加。为什么是这样?我的if语句看起来完全正确。

2 个答案:

答案 0 :(得分:2)

尝试将^([A-Za-z0-9_]{4})(?!:)替换为$1:,其中$1是第一组。

答案 1 :(得分:1)

第一次运行代码时,您在输入中搜索值“TEST”(简称为“TEST”)并将其替换为“TEST”并在末尾添加冒号。

所以在第一次迭代之后,结果将是“TEST:”。

第二次运行代码时,您在输入中搜索值“TEST”(现在是“TEST:”)并将其替换为“TEST”并在末尾添加冒号。

所以在第二次迭代之后,结果将是“TEST ::”。

似乎你只想在没有冒号的情况下(或许没有冒号)将冒号追加到最后。

尝试改变你“if”与此相符......

if ( !Regex.IsMatch( text , @"\b" + mm + @"\b:" , RegexOptions.Multiline ) )