c#不匹配我的字符串

本文关键字:字符串 我的 不匹配 | 更新日期: 2023-09-27 18:18:47

我在c#上使用。NET 2.0和WinForms。我有一个大问题与正则表达式。我试图在一个简单的字符串中添加一个冒号到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语句看起来完全正确。

c#不匹配我的字符串

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

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

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

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

那么在第二次迭代之后,结果将是"TEST::"。

似乎只在不存在冒号(可能?)的情况下才想在末尾添加冒号。

试着把你的"if"行改成这样…

if ( !Regex.IsMatch( text , @"'b" + mm + @"'b:" , RegexOptions.Multiline ) )
相关文章: