作为序言,我知道有类似的线程,但我使用的是 C#,而不是 java、python 或 Php。一些线程提供了针对单个 URL 的解决方案,这不是通用的。谢谢你没有举报我。
所以我使用谷歌快讯通过电子邮件获取文章的链接。我已经编写了一个可以从电子邮件中删除 URL 的程序以及另一个用于抓取网站的程序。我的问题是谷歌警报电子邮件中的链接如下所示:
因为这会通过 google 重定向到实际文章,所以我的抓取程序不适用于这些链接。我已经从这里的问题和其他来源尝试了一百万种不同的正则表达式。我设法剥离了所有内容,直到实际文章的 http://,但它仍然有把它搞砸的尾端。这是我到目前为止所拥有的。它们现在看起来像:
private List<string> GetLinks(string message)
{
List<string> list = new List<string>();
Regex urlRx = new Regex(@"((http|ftp|https):\/\/[\w\-_]+(\.[\w\-_]+)+([\w\-\.,@?^=%&:/~\+#]*[\w\-\@?^=%&/~\+#])?)", RegexOptions.IgnoreCase);
MatchCollection matches = urlRx.Matches(message);
foreach (Match match in matches)
{
if(!match.ToString().Contains("news.google.com/news") && !match.ToString().Contains("google.com/alerts"))
{
string find = "=http";
int ind = match.ToString().IndexOf(find);
list.Add(match.ToString().Substring(ind+1));
}
}
return list;
}
摆脱结尾的一些帮助会很棒,无论是新的 RegEx 还是一些额外的代码。提前致谢。