具有转义符的C#正则表达式帮助

时间:2019-03-06 06:17:26

标签: c# regex

我正在尝试匹配以下内容:

String RTFContent1 = @"\\htmlrtf {{\\*\\bkmkstart MyLink}\\htmlrtf0 \\htmlrtf {\\*\\bkmkend MyLink}}\\htmlrtf0 \r\n{\\*\\htmltag92 </a>}\r\n{\\*\\htmltag84 <a href=\sip: 3333@mySIPDomain.com\>}\\htmlrtf {\\field{\\*\\fldinst{HYPERLINK \sip:3333@mySIPDomain.com\}}";
String RTFContent2 = @"\\htmlrtf {{\\*\\bkmkstart MyLink}\\htmlrtf0 \\htmlrtf {\\*\\bkmkend MyLink}}\\htmlrtf0 \r\n{\\*\\htmltag92 </a>}\r\n{\\*\\htmltag84 <a href=\http://www.google.com\>}\\htmlrtf {\\field{\\*\\fldinst{HYPERLINK \http://www.google.com\}}";
String MyLink = "MyLink";

Regex regex = new Regex("bkmkstart.*" + MyLink + @".*?HYPERLINK.*?(\w+:[^\s\\]+)");
MatchCollection matches = regex.Matches(RTFContent1);
if (matches.Count == 0) -> Always true!!!

当我使用https://regex101.com/验证正则表达式时,除C#正则表达式的反斜杠加倍之外,其他所有功能均正常运行

// Working Regex
bkmkstart.*MyLink.*?HYPERLINK.*?(\w+:[^\s\\]+)
// C# Regex with no match
bkmkstart.*MyLink.*?HYPERLINK.*?(\\w+:[^\\s\\\\]+)

测试在这里:https://regex101.com/r/tZJGLE/2

第二双眼睛对此表示赞赏。

2 个答案:

答案 0 :(得分:0)

使用字符串文字时,需要将双引号引起来。

String RTFContent1 = @"\\htmlrtf {{\\*\\bkmkstart MyLink}\\htmlrtf0 \\htmlrtf {\\*\\bkmkend MyLink}}\\htmlrtf0 \r\n{\\*\\htmltag92 </a>}\r\n{\\*\\htmltag84 <a href=\""sip:3333@mySIPDomain.com\"">}\\htmlrtf {\\field{\\*\\fldinst{HYPERLINK \""sip:3333@mySIPDomain.com\""}}";

String RTFContent2 = @"\\htmlrtf {{\\*\\bkmkstart MyLink}\\htmlrtf0 \\htmlrtf {\\*\\bkmkend MyLink}}\\htmlrtf0 \r\n{\\*\\htmltag92 </a>}\r\n{\\*\\htmltag84 <a href=\""http://www.google.com\"">}\\htmlrtf {\\field{\\*\\fldinst{HYPERLINK \""http://www.google.com\""}}";

答案 1 :(得分:0)

好吧,该问题与以下事实有关:生成的字符串包含\ r \ n char,这取决于字符串的加载方式。 解决方案是包括Singleline选项以逃避它们:

Regex regex = new Regex("bkmkstart.*" + MyLink + @".*?HYPERLINK.*?(\w+:[^\s\\]+)", RegexOptions.Singleline);