我有一个正则表达式如下:
图案:<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/