[英]C# Regex optional match
我有一些頁面內容包含以下代碼行的多次出現:
<li class="r"><h3><a href="/test-url.htm">test string</a></h3></li>
我正在使用 .NET 正則表達式來查找內容中的所有匹配項並將錨標記的 href 返回給我。
我的問題是,有時<li>
在 class 周圍有引號(如上所示),但其他人沒有,只有: class=r
我需要對帶引號和不帶引號的匹配。
我嘗試了各種方法,但似乎沒有任何效果。 有引號時它們都匹配,但沒有引號時它們都匹配。 以下是我目前的嘗試:
Regex _Regex = new Regex(@"<li class=(?:"")g([^>])*>((?!<h3).)*<h3([^>])*><a\shref=""(?<URL>[^""]*)""([^>])*>((?!</li).)*", RegexOptions.IgnoreCase);
任何幫助深表感謝,
謝謝。
我認為你想要的格式是
“”?
不是
?:
問號將前面的字符標記為可選。
訣竅是匹配並捕獲可選的第一個引號,因此該組最終包含引號或空字符串。 然后,您在單詞末尾使用反向引用來再次匹配相同的內容。
@"<li class=(""?)r\1[^>]*>"
附帶說明一下,這在您的正則表達式中出現了三次,這是錯誤的: ([^>])*
。 它與您想要的匹配,但它只捕獲最后一個字符。 如果您需要捕獲這些段,您應該在組內移動星號。 如果您不需要捕獲它,只需像我一樣擺脫括號即可。
這是正則表達式的一部分。 我想你知道如何解決它:
<li class=["r]+?>
或者
<li class=["]?r["]?>
他們都工作。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.