【发布时间】:2017-07-06 20:06:00
【问题描述】:
我有以下 C# 正则表达式
@"(?:https?:\/\/)?(?:www\.)?(?:(?:(?:youtube\.com\/watch\?[^?]*v=|youtu\.be\/)))([\w-]+)";
如何更正此问题,以便正则表达式不会匹配 URL 开头带有双引号的 URL。因此,如果 URL 在超链接中的 href 属性中,它将被忽略且不会被捕获。
我在我的另一个 Twitter 正则表达式模式中使用了这个表达式,但我不能让它在这个模式中工作。
(?<!"")
它适用于 Twitter 模式:
(?<!"")https?://twitter\.com/(?:#!/)?(\w+)/status(?:es)?/(\d+)
因此,YouTube 正则表达式应该只抓取 URL 开头没有双引号的 URL。
【问题讨论】:
-
之前使用 html 解析器提取文本节点,这样可以避免所有 html 属性。 (如果您使用 XPath 查询,您甚至可以只选择包含字符串“youtu”的文本节点)
-
其实如果只需要提取纯文本中的链接,最好用HtmlAgilityPack:
public string getCleanHtml(string html) { var doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(html); return HtmlAgilityPack.HtmlEntity.DeEntitize(doc.DocumentNode.InnerText); }跨度> -
@WiktorStribiżew 我有 HTMLAgilityPakck 我实际上在我的项目中使用它。
-
您需要在
@"..."中转义的一件事是引号字符本身...通过将@""""not 与反斜杠@"\""加倍来转义它(并且不要不要像在您的评论中那样直接写它)
标签: c# regex regex-negation