我正在尝试匹配以下内容:
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
第二双眼睛对此表示赞赏。
答案 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);