เพื่อเป็นคำนำ ฉันรู้ว่ามีกระทู้ที่คล้ายกันเกี่ยวกับเรื่องนี้ แต่ฉันใช้ C# ไม่ใช่ java หรือ python หรือ Php บางเธรดมีวิธีแก้ปัญหาสำหรับ URL เดียวซึ่งไม่เป็นสากล ขอบคุณที่ไม่ตั้งค่าสถานะฉัน
ดังนั้นฉันจึงใช้ Google Alerts เพื่อรับลิงก์ไปยังบทความทางอีเมล ฉันได้เขียนโปรแกรมที่สามารถดึง URL ออกจากอีเมลได้เช่นเดียวกับโปรแกรมอื่นเพื่อขูดเว็บไซต์ ปัญหาของฉันคือลิงก์ในอีเมลแจ้งเตือนของ Google มีลักษณะดังนี้:
เนื่องจากสิ่งนี้เปลี่ยนเส้นทางไปยังบทความจริงผ่าน Google โปรแกรมขูดของฉันจึงไม่ทำงานบนลิงก์เหล่านี้ ฉันได้ลองใช้ RegEx ที่แตกต่างกันนับล้านจากคำถามที่นี่และแหล่งอื่นๆ ฉันจัดการเพื่อดึงทุกอย่างออกจนถึง 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 ใหม่หรือโค้ดพิเศษบางอย่าง ขอบคุณล่วงหน้า.