解析(复杂的)URL

解析(复杂的)URL

这是一个棘手的问题,需要掌握一定程度的 Excel 函数,而我目前还不具备这种水平。我研究 Excel 网站已经很久了,但仍然没有进步。

我正在尝试获取一个复杂的 URL,例如:

http://dp18776.live.domiain.net/active/MO_Mi_WFM

并对其进行解析,以便得到以下信息:

live.domain.net

我得到最接近的答案是:

http://dp18776.live.domiain.net

我的逻辑:

=LEFT(A17, SEARCH(".net",A17)+3)

我不能停在那里的原因是,本地部分可以在数千条记录中变化,而只有域(例如 live.domain.net)是恒定的。

我也知道我需要使用 MID 函数,我正在测试我可以在更基本的函数上实现什么,但更大的问题是我需要能够关闭“.net”来检索域,所以我需要将 MID() 中的起点设置为“.net”-len(domain)

有人能帮我完成这个公式吗?

答案1

这里的每个人似乎都关注.com.net,但域名并不总是以.com或结尾.net......然而,它们总是在/

因此,首先找到主机名的开始位置:

=FIND("://", A1) + LEN("://")
=FIND("://", A1) + 3

然后找到第一个斜杠——这就是主机名结束

=FIND("/", A1, FIND("://", A1) + 3)

或者,以防根本没有路径:

=IFERROR(FIND("/", A1, FIND("://", A1) + 3), LEN(A1) + 1)

并提取其间的所有内容:

=MID(A1;FIND("://";A1)+3;IFERROR(FIND("/";A1;FIND("://";A1)+3);LEN(A1)+1)-(FIND("://";A1)+3))

A1: https://www.example.com/foo/bar
A2: =FIND("://";A1)+3
A3: =IFERROR(FIND("/";A1;A2);LEN(A1)+1)
A4: =MID(A1;A2;A3-A2)

如果您想扔掉最左边的域组件,您可以使用FIND(".",A1)

=MID(A1;FIND(".";A1)+1;IFERROR(FIND("/";A1;FIND(".";A1)+1);LEN(A1)+1)-(FIND(".";A1)+1))

A1: https://www.example.com/foo/bar
A2: =FIND(".";A1)+1
A3: =IFERROR(FIND("/";A1;A2);LEN(A1)+1)
A4: =MID(A1;A2;A3-A2)

对于 Salesforce,没有错误检查:

=MID(A1,FIND("://",A1)+3,FIND("/",A1,FIND("://",A1)+3)-(FIND("://",A1)+3))

=MID(A1,FIND(".",A1)+1,FIND("/",A1,FIND(".",A1)+1)-(FIND(".",A1)+1))

注意:仍然有一些假设 – 例如,如果 URL 中有username@domain或 ,它将无法正常工作username:password@domain。该FIND(".")版本还假设至少有两个域组件,并且无法正常工作https://example/foo– 它需要一些额外的 IFERROR() 检查。

答案2

您可以使用通过 VBA 进行正则表达式

并使用类似下面的命令获取你的主机名:

https?:\/\/[a-zA-Z0-9-]+\.([a-zA-Z0-9.-]+)\/.*

第 1 组:

live.domain.net

答案3

在不知道您所在地区的情况以及您的问题所在的情况下,我会先搜索扩展名,然后搜索第一个,.因为您没有www.。如果有,请搜索第二个.。我会提供零件,然后提供实际公式。

搜索您需要查找的任何扩展。

=IFERROR((SEARCH(".com",A1)),0)+IFERROR((SEARCH(".net",A1)),0)+IFERROR(SEARCH(".org",A1),0)

寻找你的第一个.

=SEARCH(".",A1)

然后将它们合并=MID()

=MID(A1,SEARCH(".",A1)+1,IFERROR((SEARCH(".com",A1)),0)+IFERROR((SEARCH(".net",A1)),0)+IFERROR(SEARCH(".org",A1),0)-SEARCH(".",A1)+3)

如果不是总是有本地部分,那么可能会变得更加棘手。如果您的本地字符串始终具有相同的长度或始终具有特定的字符串或某些值等,还有其他一些方法可以做到这一点。

你可以去掉iferror部分,如果你总是了解扩展,或者您可以添加其他扩展。

相关内容