C# Regex仅提取在<;中有特定单词的a href;a>;

C# Regex仅提取在<;中有特定单词的a href;a>;,c#,regex,C#,Regex,我有这个html: <a href="https://m.com/link/NX1B4efPlb2Es3xh1ip" target="_blank" style="-ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; cursor: pointer; word-wrap: break-word; word-break: break-word; color: #FFFFFF; text-decoration: none;"&g

我有这个html:

<a href="https://m.com/link/NX1B4efPlb2Es3xh1ip" target="_blank" style="-ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; cursor: pointer; word-wrap: break-word; word-break: break-word; color: #FFFFFF; text-decoration: none;">Specific word</a>

我正在寻找一个正则表达式,它只提取链接中有“特定单词”文本的href:

提取href
https://m.com/link/NX1B4efPlb2Es3xh1ip
当文本
特定单词时


谢谢你

如果你真的想用正则表达式,我建议如下:

/.*href=\"(.*?)\".*>Specific word.*/g
说明:

  • *
    匹配每个可能的开头
  • href
    与href匹配
  • \“
    与”
  • (.*)
    是href内容的非贪婪匹配,它将结果存储在捕获组中(捕获组就是您要查找的内容)
  • \“
    匹配结束”
  • *>
    匹配标记的其余部分,直到其关闭
  • 特定单词
    与特定单词匹配
  • *
    匹配所有其他项

如果您使用这样的捕获组:

Regex query = new Regex(".*href=\"(?<link>.*?)\".*>(?<name>.*?)</a>");
如果您可能有多个结果,您可以这样循环:

MatchCollection mc = query.Matches(page);
foreach (Match m in mc){
    if(m.Groups["name"].Value == "Specific Word")
    {
        // Do something with m.Groups["link"].Value
    }
}

可能重复的
实际上是您唯一可能的输入,还是要从任意HTML中选取特定的标记?因为后者是不可能的。我建议使用XML解析器。谢谢markus的帮助,但正则表达式匹配所有句子,而不仅仅是在线测试仪#中的href:它匹配整个字符串,但捕获链接目标(括号中的位),只需使用该捕获来提取目标。@timothylhuillier如Pezo所说,只需使用捕获组,您就可以开始了:)如果href不是链接的第一个属性,则此操作不起作用。我不相信HTML属性的顺序。另外,如果链接具有多个属性(OP的问题就是这种情况),它也不起作用。更改了regex查询以修复此问题谢谢,但我只能使用regex,不能使用其他代码。
MatchCollection mc = query.Matches(page);
foreach (Match m in mc){
    if(m.Groups["name"].Value == "Specific Word")
    {
        // Do something with m.Groups["link"].Value
    }
}