Excel 公式格式化 URL Regex

Excel 公式格式化 URL Regex

我需要为黑名单创建正则表达式,该正则表达式接受所有 URL 变体 - http:// 或 https://(带或不带 www)。我想到了这个:

网址: https://www.example.com/contactus.aspx

正则表达式:

(https?:\/\/)?(www\.)?example\.com\/contactus\.aspx

我有数百个这样的 URL,所以大约一年前我创建了 Excel 公式来格式化它:

=CONCATENATE("(https?:\/\/)?(www\.)?",(SUBSTITUTE(SUBSTITUTE(IF(LEFT(MID(A2,FIND("//",A2)+2,LEN(A2)-FIND("//",A2)-1-(RIGHT(A2)="/")),4)="www.", RIGHT(MID(A2,FIND("//",A2)+2,LEN(A2)-FIND("//",A2)-1-(RIGHT(A2)="/")), LEN(MID(A2,FIND("//",A2)+2,LEN(A2)-FIND("//",A2)-1-(RIGHT(A2)="/")))-4), MID(A2,FIND("//",A2)+2,LEN(A2)-FIND("//",A2)-1-(RIGHT(A2)="/"))),"/","\/"),".","\.")))

它并不漂亮,但可以工作 - 有点。我刚刚注意到当 URL 包含 + 或 ? 时,它不会将字符转义为"\+" or "\?"

网址: http://example.com/Site/Find+The+Site.php?lang=en

正则表达式:

(https?:\/\/)?(www\.)?example\.com\/Site\/Find+The+Site\.php?lang=en

已经有一段时间了,我仍然不明白我当初是如何想出这个公式的——可能有更好的方法来做到这一点。

预期的正则表达式是:(https?:\/\/)?(www\.)?example\.com\/Site\/Find\+The\+Site\.php\?lang=en

我当前的解决方法是在运行公式之前处理 URL 以转义 + 和 ? =SUBSTITUTE(SUBSTITUTE(A2,"?","\?"),"+","\+")。我想合并上面的 SUBSTITUTE,以便一个公式可以处理 www/http/https 和转义 +、?

答案1

如果我理解正确的话,你可以将你的SUBSTITUTE公式包括在内:

="https?://(?:www\.)?" & MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE( I1,"/www.","/"),"+","\+"),".","\."),"?","\?"),FIND("//",I1)+2,999)

请注意,我没有逃脱固相线在正则表达式中。这是否必要取决于语言是否使用斜线作为模式分隔符。在 Excel VBA 正则表达式中,情况并非如此。在其他情况下,情况可能如此。因此,您可能需要添加另一个嵌套的SUBSTITUTE,并进行一些其他细微更改,以解决此问题

例如:

="https?:\/\/(?:www\.)?" & MID(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE( I1,"/www.","/"),"/","\/"),"+","\+"),".","\."),"?","\?"),FIND("//",I1)+4,999)

给出你的网址,http://example.com/Site/Find+The+Site.php?lang=en

第一个公式将返回:

https?://(?:www\.)?example\.com/Site/Find\+The\+Site\.php\?lang=en

第二:

https?:\/\/(?:www\.)?example\.com\/Site\/Find\+The\+Site\.php\?lang=en

相关内容