gpt4 book ai didi

.net - 修复Youtube URL RegEx(.NET ReGex引擎语法)

转载 作者:行者123 更新时间:2023-12-03 05:28:32 24 4
gpt4 key购买 nike

我开发了一个供个人使用的应用程序,该应用程序可以分析从YouTube发送到我的电子邮件帐户的邮件,然后从每个邮件中提取视频URL。

我每隔一两个月使用此应用程序一次,下一个正则表达式在1〜2年内运行良好,这是我最后一次使用该应用程序:

C#语法:

Regex urlRegex = new Regex("(content|href)=\"(?<url>(http|https)://www.youtube.com.+watch.+?)\"", RegexOptions.IgnoreCase);

VB.NET语法:
Dim urlRegex As New Regex("(content|href)=""(?<url>(http|https)://www.youtube.com.+watch.+?)""", RegexOptions.IgnoreCase)

但是,今天我注意到它不再起作用了……他们用来编写正文内容的模板发生了一些变化。

举例来说,此正文内容来自一条消息:

https://pastebin.com/VJS6bvMU

这是它在“url”组名称中应该匹配的内容:
https://www.youtube.com/attribution_link?a=IGCom2KEH-lFJgHW&amp;u=/watch%3Fv%3DW0ToDn9jXW8%26feature%3Dem-lsp

这是当前匹配的内容:
https://www.youtube.com/attribution_link?a=IGCom2KEH-lFJgHW&amp;u=/"><img alt="Youtube Logo" class="header_logo_size" height="30" src="http://www.gstatic.com/youtube/img/branding/youtubelogo/1x/youtubelogo_60.png" border="0" style="display:block"></a> </td></tr></tbody></table></td></tr><tr><td style="max-height:0px; font-size:0; display:none"><hr class="inner-container-width" width="600" style="height:0px; border:none; border-color:transparent; padding:0px; margin:0px"></td></tr><tr><td class="large-section-padding-height" height="20"></td></tr><tr><td><table class="inner-container-width" width="600" align="center" valign="center" cellspacing="0" cellpadding="0" border="0"><tbody><tr><td><table class="video-spotlight-width" width="600" align="center" cellspacing="0" cellpadding="0" border="0"><tbody><tr style=""><td colspan="3"><a href="https://www.youtube.com/attribution_link?a=IGCom2KEH-lFJgHW&amp;u=/watch%3Fv%3DW0ToDn9jXW8%26feature%3Dem-lsp" class="nonplayable" style="text-decoration:none; display:block"><table aria-label="Astrid S - Dance Dance Dance (Official Music Video)" class="video-spotlight-width" width="600" align="center" background="http://i.ytimg.com/vi/W0ToDn9jXW8/sddefault.jpg?sqp=-oaymwEGCIAFEOgC&amp;rs=AMzJL3m-iY1ZW8EiY3QwRalAMfq3atBT-Q&amp;feature=em-lsp" height="338" cellspacing="0" cellpadding="0" border="0" style="background-repeat:no-repeat; background-size:cover; background-position:center"><tbody><tr style=""><td aria-label="Astrid S - Dance Dance Dance (Official Music Video)"><img src="https://www.gstatic.com/youtube/img/email/transparent_pixel.png" alt="Astrid S - Dance Dance Dance (Official Music Video)" width="600" style="max-height:300px"> </td></tr><tr aria-label="Astrid S - Dance Dance Dance (Official Music Video)" scope="row" style=""><td aria-label="Astrid S - Dance Dance Dance (Official Music Video)" class="footer-font" valign="bottom" width="600" style="color:#fff; text-align:right; font-size:12px"><div style="margin-bottom:8px; margin-right:8px; border-radius:2px; background-color:#E62117; padding:2px 4px; display:inline-block">PREMIERE</div></td></tr></tbody></table></a></td></tr><tr><td><table class="large-section-padding-height" height="16" cellspacing="0" cellpadding="0" border="0"><tbody><tr><td class="large-section-padding-height" height="16"></td></tr></tbody></table></td></tr><tr><td><table class="content-container-width" width="560" cellspacing="0" cellpadding="0" border="0" style="table-layout:fixed"><tbody><tr><td class="avatar-size" width="32" style="vertical-align:top"><a href=""><img class="avatar-size" src="https://lh6.googleusercontent.com/-YdGE1ZRP_7k/AAAAAAAAAAI/AAAAAAAAAAA/lTcGNRWN4cc/s88-c-mo/photo.jpg" width="32" border="0" style="display:block; border-radius:50%"> </a></td><td class="small-pad-width" width="16"></td><td><table class="content-container-width" width="540" cellspacing="0" cellpadding="0" border="0" style="table-layout:fixed"><tbody><tr><td valign="center"><table class="content-container-width" cellspacing="0" cellpadding="0" border="0" style="table-layout:fixed"><tbody><tr><td style="padding-bottom:4px"><a href="https://www.youtube.com/attribution_link?a=IGCom2KEH-lFJgHW&amp;u=/watch%3Fv%3DW0ToDn9jXW8%26feature%3Dem-lsp

(请注意,正确的url在字符串的最后匹配。)

如何修复当前的正则表达式,使其仅匹配我指定的url,而忽略左侧的所有“垃圾”?

PD:我不需要考虑域名变化(例如youtu.be)和其他任何邮件中都不会指定的东西的 super 复杂的正则表达式。我也不想为此使用 HtmlAgilityPack 或类似的库,因为当Youtube改变 body 内容中的任何小东西时,它将需要更多的维护/更新。

最佳答案

使用

Regex urlRegex = new Regex("(content|href)=\"(?<url>(http|https)://www\.youtube\.com[^\"]+watch[^\"]+)\"", RegexOptions.IgnoreCase);

参见 proof
[^\"]+将匹配 "以外的一个或多个字符,因此匹配将不会溢出双引号。 .+贪婪地匹配除换行符以外的任何字符。

关于.net - 修复Youtube URL RegEx(.NET ReGex引擎语法),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62237592/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com