【问题标题】:Regex - Single quotes OR Double quotes -C#正则表达式 - 单引号或双引号 -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 获取 hrefs。

标签: c# regex double-quotes single-quotes


【解决方案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 :记得按帖子左侧的绿色复选标记将此标记为已接受的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-08
  • 2011-05-01
  • 2013-10-20
  • 1970-01-01
相关资源
最近更新 更多