正则表达式 - 单引号或双引号 -C#
Posted
技术标签:
【中文标题】正则表达式 - 单引号或双引号 -C#【英文标题】:Regex - Single quotes OR Double quotes -C# 【发布时间】:2016-04-18 20:04:54 【问题描述】:如何更改:
Regex.Match(value, @"href=\""(.*?)\""",RegexOptions.Singleline);
这样它将选择 href='foobar' (单引号 ') 以及选择 href="foobar" (双引号 ")??
【问题讨论】:
检查this question。问题中的正则表达式应该适合你。 您是否只想选择 href='foobar' ? 如果您想从 html 中解析出 href 链接,请参阅 snippet here 展示如何使用 HtmlAgilityPack 做到这一点。 我尝试在当天早些时候通过 NuGet 安装 HtmlAgilityPack,但是在安装时它只是说“无法安装,数据损坏”或类似的东西 我没有遇到任何麻烦。您可以稍后重试。如果您愿意,我可以发布我的答案,描述如何使用 HtmlAgilityPack 获取href
s。
【参考方案1】:
你可以使用这样的模式:
href=(["'])(.*?)\1
这将匹配包含 href=
后跟 "
或 '
后跟任意数量的字符(非贪婪)后跟之前在组 1 中匹配的相同字符的任何字符串。请注意, \1
是 backreference。
另请注意,这也意味着您的属性内容将被捕获在第 2 组而不是第 1 组中。
现在,转义 string literal 的正确方法是这样(使用常规字符串):
Regex.Match(value, "href=([\"'])(.*?)\\1", RegexOptions.Singleline);
或者像这样(使用逐字字符串):
Regex.Match(value, @"href=([""'])(.*?)\1", RegexOptions.Singleline);
【讨论】:
@SamHoole :记得按帖子左侧的绿色复选标记将此标记为已接受的答案。以上是关于正则表达式 - 单引号或双引号 -C#的主要内容,如果未能解决你的问题,请参考以下文章