簡體   English   中英

C# 正則表達式可選匹配

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

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