简单的正则表达式问题来解析.NET中类似的东西?

时间:2010-03-04 21:55:05

标签: c# .net regex string parsing

有没有办法收集字符串中包含特定域的所有链接,其中只包含以下任何一个:

href="http://yahoo.com/media/news.html"

>http://yahoo.com/media/news.html<

所以基本上链接的前缀是href=",最后是"

><包围的链接。

我尝试使用Regex ( "href=\"([^\"]*)\"></A>" ),但没有匹配。

3 个答案:

答案 0 :(得分:3)

(href="[^"]*")|(>[^<]*<)

以href =“开头,后跟不是”的字符,以“

结尾

以&gt;开头,后跟不是&lt;的字符,以&lt;

结尾

答案 1 :(得分:3)

尝试以下方法:

string[] inputs = { "href=\"http://yahoo.com/media/news.html\"", ">http://yahoo.com/media/news.html<" };

string pattern = @"(?:href=""|>)(?<Url>http://.+?)[<""]";
foreach (string input in inputs)
{
    Match m = Regex.Match(input, pattern);
    if (m.Success)
    {
        Console.WriteLine(m.Groups["Url"].Value);
    }
}

编辑:另一种方法是使用环视,以便文本匹配但不会被捕获。这允许您直接使用Match.Value而不是使用组。请尝试以下替代方法。

string pattern = @"(?<=href=""|>)http://.+?(?=<|"")";
foreach (string input in inputs)
{
    Match m = Regex.Match(input, pattern);
    if (m.Success)
    {
        Console.WriteLine(m.Value);
    }
}

编辑#2 :此处评论中的请求是一种与文本中包含“...”的网址不匹配的模式。

string pattern = @"(?<=href=""|>)http://(?!.*\.{3}).+?(?=<|"")";

唯一的变化是(?!.*\.{3})的添加,这是一个负向前瞻,如果指定的后缀不存在,则允许模式匹配。在这种情况下,它检查“...”是否缺席。如果您需要匹配至少3个点,请使用{3,}

答案 2 :(得分:1)

尝试:

http=\"(.+)\"