繁体   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