C# Regex仅提取在<;中有特定单词的a href;a>;
我有这个html: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
<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:
提取hrefhttps://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
}
}