正则表达式 - 单引号或双引号 -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 获取 hrefs。 【参考方案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#的主要内容,如果未能解决你的问题,请参考以下文章

PHP,单引号或双引号中哪个更快? [复制]

使用带单引号或双引号的 strlen

变量连接的单引号或双引号? [关闭]

VBA.replace替换单引号或双引号

groovy中单引号或双引号内的字符串有啥区别?

Perl eval EXPR 用单引号或双引号括起来