[英]Need some C# Regular Expression Help
我試圖想出一個正則表達式,它將在第一次出現</ol>
時停止。 我目前的 RegEx 類型有效,但前提是</ol>
兩端都有空格。 例如,它不會在下一行的第一個實例處停止,而是在第二個實例處停止
some random text <a href = "asdf">and HTML</a></ol></b> bla </ol>
這是我目前使用的模式: string pattern = @"some random text(.|\r|\n)*</ol>";
我究竟做錯了什么?
string pattern = @"some random text(.|\r|\n)*?</ol>";
注意星號后面的問號——它告訴它是非貪婪的,這基本上意味着它會盡可能少地捕獲,而不是盡可能多地貪婪。
通過添加?
使您的通配符“不貪婪” . 例如
some random text(.|\r|\n)*?</ol>
^- Addition
這將使正則表達式匹配盡可能少的字符,而不是匹配盡可能多的字符(標准行為)。
哦,正則表達式不應該解析 [X]HTML
雖然不是正則表達式,但為什么不簡單地使用 Substring 函數,例如:
string returnString = someRandomText.Substring(0, someRandomText.IndexOf("</ol>") - 1);
這似乎比想出一個正則表達式來涵蓋所有可能的字符、空格等種類要容易得多。
此正則表達式匹配從字符串開頭到第一個</ol>
的所有內容。 它使用 Friedl 的“展開循環”技術,因此非常有效:
Regex pattern = new Regex(
@"^[^<]*(?:(?!</ol\b)<[^<]*)*(?=</ol\b)",
RegexOptions.IgnoreCase);
resultString = pattern.Match(text).Value;
其他人已經解釋了失蹤?
使量詞不貪婪。 我還想提出另一個改變。
我不喜歡你的(.|\r|\n)
部分。 如果您的交替中只有單個字符,則制作字符 class [.\r\n]
更簡單。 這是做同樣的事情,而且更好讀(我不知道編譯器是否明智,也許它也更有效)。
但是在您的特殊情況下,當.
只是換行符,這也不是正確的方法。 在這里你應該這樣做:
Regex A = new Regex(@"some random text.*?</ol>", RegexOptions.Singleline);
使用Singleline
修飾符。 它只是使.
也匹配換行符。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.