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