有没有办法收集字符串中包含特定域的所有链接,其中只包含以下任何一个:
href="http://yahoo.com/media/news.html"
或
>http://yahoo.com/media/news.html<
所以基本上链接的前缀是href="
,最后是"
或
><
包围的链接。
我尝试使用Regex ( "href=\"([^\"]*)\"></A>" )
,但没有匹配。
答案 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=\"(.+)\"