$ 替换:$1\r\n 它适用于普通编辑器,甚至适用于 regex101:Demo with Input 我想用 C# 编写-6ren">
gpt4 book ai didi

c# - 为什么我的正则表达式在 C# 中不起作用,但在其他文本编辑器中起作用?

转载 作者:太空宇宙 更新时间:2023-11-03 12:04:01 25 4
gpt4 key购买 nike

我有一个正则表达式如下:

图案:<navPoint id="navPoi[^"]+" playOrder="[^"]+"><navLabel><text>([^<>\r\n]+)</text></navLabel><content src="([^<>\r\n]+)"/>$

替换:<li id="NavPoint-#"><a href="$2">$1</a>\r\n<ol>

它适用于普通编辑器,甚至适用于 regex101:Demo with Input

我想用 C# 编写相同的代码,但是当我这样做时,它不起作用。我做错了什么吗?

这是我的代码:

string secondPattern = @"<navPoint id=""navPoi[^""]+"" playOrder=""[^""]+""><navLabel><text>([^<>\n]+)<\/text><\/navLabel><content src=""([^<>\n]+)""\/>$";
string secondSubstitution = @"<li id=""NavPoint-#""><a href=""$2"">$1</a>\r\n<ol>";
Regex secondRegex = new Regex(secondPattern, options);
string anotherNavMap = secondRegex.Replace(newNavMap, secondSubstitution);

最佳答案

您应该确保将 RegexOptions.Multiline 选项传递给正则表达式编译,并在 $ 行尾 anchor 之前允许 CR 作为 $ 在多行模式下只匹配 LF 符号之前。

另外,@"\r\n"是4个字符的字符串,如果需要CRLF换行,使用"\r\n",一字不差字符串文字不支持字符串转义序列。

这是一个代码修复:

string secondPattern = @"<navPoint id=""navPoi[^""]+"" playOrder=""[^""]+""><navLabel><text>([^<>\n]+)</text></navLabel><content src=""([^<>\n]+)""/>\r?$";
string secondSubstitution = "<li id=\"NavPoint-#\"><a href=\"$2\">$1</a>\r\n<ol>";
Regex secondRegex = new Regex(secondPattern, RegexOptions.Multiline);
string anotherNavMap = secondRegex.Replace(newNavMap, secondSubstitution);

关于c# - 为什么我的正则表达式在 C# 中不起作用,但在其他文本编辑器中起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55920342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com