我有一个正则表达式如下:
模式:<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);
答案 0 :(得分:1)
您应该确保将RegexOptions.Multiline
选项传递给regex编译,并在行锚的$
末尾之前允许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);