【问题标题】:RegEx to Parse URL from text (text Contains HTML tags)RegEx to Parse URL from text (text contains HTML tags)
【发布时间】:2013-03-23 13:50:55
【问题描述】:

我想从给定文本中解析 URL,

输入文本:-

 <h3 class="r"> <a
 href="/url?q=http://rakesh.agrawal-family.com/papers/vldbj03watermark.pdf&amp;sa=U&amp;ei=m2laUfD2AdDorQf0rYHoDw&amp;ved=0CBoQFjAA&amp;usg=AFQjCNFJOQCS471sWjxy5CkNbzDxzcD66A">
 <h3 class="r"> <a
 href="/url?q=http://www.cse.ust.hk/vldb2002/VLDB2002-proceedings/papers/S05P03.pdf&amp;sa=U&amp;ei=m2laUfD2AdDorQf0rYHoDw&amp;ved=0CCIQFjAD&amp;usg=AFQjCNHbfCk_51dKLupvs3KVVEDboK54xg">
 <h3 class="r"> <a
 href="/url?q=http://cvml.unige.ch/publications/postscript/99/VoloshynovskiyPereiraPun_eww99.pdf&amp;sa=U&amp;ei=m2laUfD2AdDorQf0rYHoDw&amp;ved=0CCYQFjAE&amp;usg=AFQjCNGt54TSNY93PXgd4u4L3-E6C6P2jw">

预期输出:

http://rakesh.agrawal-family.com/papers/vldbj03watermark.pdf

http://www.cse.ust.hk/vldb2002/VLDB2002-proceedings/papers/S05P03.pdf

http://cvml.unige.ch/publications/postscript/99/VoloshynovskiyPereiraPun_eww99.pdf

示例代码:-

Match match = Regex.Match(input, @"<h3 class=""r""> <a href=""/url\?q=(.*?)&amp;", RegexOptions.IgnoreCase);         
while (match.Success)            
{                
// Finally, we get the Group value and display it.                
string key = match.Groups[1].Value;                
Console.WriteLine(key);                
match = match.NextMatch();  

【问题讨论】:

标签: c# .net regex


【解决方案1】:

请注意,不建议混合使用 HTML 和正则表达式。

但如果您正在寻找快速破解,您可以使用这个正则表达式:

url\?q=\*\*[\'"]?([^\'" >]+)\*\*

在这里查看此链接:http://rubular.com/r/v0jqtAXMF9

【讨论】:

    【解决方案2】:

    RegEx 构建 DFA,因此非常昂贵, 如果你需要从已知模式中提取数据,你可以使用这个,

    url=line[i].substring(line[i].indexOf("q=")+1, line[i].indexOf(">\""));
    

    基本上使用索引的线性搜索而不是复杂的 DFA

    【讨论】:

    • 我不能使用...的索引...我有完整的 Html 页面...。还有 20 个链接。所以我需要使用正则表达式..
    猜你喜欢
    • 1970-01-01
    • 2022-12-02
    • 2019-08-26
    • 2019-11-24
    • 2013-06-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-11
    相关资源
    最近更新 更多