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语句看起来完全正确。
尝试将^([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 ) )