簡體   English   中英

需要一些 C# 正則表達式幫助

[英]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.

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