簡體   English   中英

C#正則表達式協助,帶有轉義字符

[英]C# Regex assistance with escape character

我正在嘗試匹配以下內容:

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

任何第二雙眼睛對此表示贊賞。

使用字符串文字時,需要將雙引號引起來。

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\""}}";

好的,問題與以下事實有關:所生成的字符串包含\\ r \\ n char,該字符的解釋取決於字符串的加載方式。 解決方案是包括Singleline選項以轉義它們:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM