如何将这些字符串与正则表达式匹配?

时间:2009-10-20 01:02:33

标签: c# .net regex parsing

<div> 

            <a href="http://website/forum/f80/ThreadLink-new/" id="thread_gotonew_565407"><img class="inlineimg" src="http://website/forum/images/buttons/firstnew.gif" alt="Go to first new post" border="0" /></a> 



            [MULTI]
            <a href="http://website/forum/f80/ThreadLink/" id="thread_title_565407" style="font-weight:bold">THREAD TITLE</a> 

        </div> 

我知道我感兴趣的链接会变得粗体:

font-weight:bold

但链接本身才出现。我怎样才能匹配链接地址:

http://website/forum/f80/ThreadLink/

和主题标题:

THREAD TITLE

编辑:Internet Explorer HTML代码非常不同:

  <A style="FONT-WEIGHT: bold" id=thread_title_565714 
      href="http://LinkAddress-565714/">ThreadTitle</A> </DIV>

3 个答案:

答案 0 :(得分:4)

.*<a href="(.*?)".*style="font-weight:bold">(.*?)</a>

匹配组1:网址 匹配组2:主题标题

这将匹配任何粗体链接。如果要匹配特定的值,请将(。*?)替换为这些值。

答案 1 :(得分:2)

试试这个:

ThreadTitle

<A style="FONT-WEIGHT: bold" id=(?<id>.*?)[\s\S]*? href="(?<url>.*?)">(?<title>.*?)</A>

所以你可以使用:

Regex link = new Regex(@"<A style=""FONT-WEIGHT: bold"" id=(?<id>.*?)[\s\S]*? href=""(?<url>.*?)"">(?<title>.*?)</A>");
foreach (Match match in link.Matches(input))
{
    Console.WriteLine(
        "Id={0}, Url={1}, Title={2}",
        match.Groups["id"].Value,
        match.Groups["url"].Value,
        match.Groups["title"].Value);
}

答案 2 :(得分:1)

<a href="([^"]*)"[^>]*style="[^"]*font-weight:bold[^"]*"[^>]*>([^<]*)</a>

与之前的答案大致相同,只是我已将.*替换为[^"]*等。在第一场比赛中,这可以防止它匹配下一个双引号符号之外的任何内容。如果不这样做,如果在输入看起来像这样的情况下你可以匹配太多:

<a href="#dont_match_me">Don't match me</a><br/>
<a href="http://website/forum/f80/ThreadLink/ style="font-weight:bold">THREAD TITLE</a>