客户提供许多不同类型格式的网址。我寻找一个可以提取主机名的Excel公式(包括www,如果提供的话),其他一切都需要修剪掉。以下是我们收到的网址示例,粗体文字是我希望在下一个相邻单元格中提取的部分。单细胞公式是理想的(RIGHT,LEFT,REGEXMATCH等),但我没有成功匹配以下所有变体,寻求社区寻求帮助: - )
的http:// testing.com.my /学院/ openday /? utm_campaign =癸&安培; utm_source =搜索和安培; utm_medium = CPC&安培;的utm_content =链路
的http:// testing.com utm_source =测试
的http:// testing.com / utm_source =测试
的http:// www.testing.com.sg /测试utm_source =测试
的https:// www.testing.com / asdsd utm_source =测试
的http:// www.testing.edu.my /学院/ openday / utm_campaign =癸&安培; utm_source =搜索和安培; utm_medium = CPC&安培;的utm_content =链路
testing.edu.my
testing.com
testing.com /?asdomasd
www.testing.com
www.testing.com.my ?测试
www.testing.com.my /?测试
www.testing.edu.my / openday / utm_campaign =癸&安培; utm_source =搜索和安培; utm_medium = CPC&安培;的utm_content =链路
www.testing.edu.my /学院/ openday /
// www.testing.com /测试
// testing.com / DDSD?utm_source =测试
答案 0 :(得分:0)
请注意,您正在寻找的正则表达式并不常见,因为您接受匹配可能直接从//
开始的网址。
因此,在Excel公式中,使用以下正则表达式^(https?:)?(\/\/)?([^\/]*).*
并在正则表达式匹配时访问第3个匹配组。
请注意,这将为您提供主机名或IP地址(对于IPv6地址,您将获得[theIPv6Address]
以及地址周围的插入符号。)
答案 1 :(得分:0)
很抱歉,我找不到更短的一个但是你去了:
=MID(A2,FIND(MID(E2,IFERROR(FIND("|",SUBSTITUTE(LEFT(A2,FIND(".",A2)-1),"/","|",LEN(LEFT(A2,FIND(".",A2)-1))-LEN(SUBSTITUTE(LEFT(A2,FIND(".",A2)-1),"/","")))),0)+1,30),A2),FIND(MID(MID(A2,FIND("|",SUBSTITUTE(A2,".","|",LEN(A2)-LEN(SUBSTITUTE(A2,".","")))),10),1,IFERROR(IFERROR(FIND("/",MID(A2,FIND("|",SUBSTITUTE(A2,".","|",LEN(A2)-LEN(SUBSTITUTE(A2,".","")))),10)),FIND("?",MID(A2,FIND("|",SUBSTITUTE(A2,".","|",LEN(A2)-LEN(SUBSTITUTE(A2,".","")))),10))),LEN(MID(A2,FIND("|",SUBSTITUTE(A2,".","|",LEN(A2)-LEN(SUBSTITUTE(A2,".","")))),10))+1)-1),A2)+LEN(MID(MID(A2,FIND("|",SUBSTITUTE(A2,".","|",LEN(A2)-LEN(SUBSTITUTE(A2,".","")))),10),1,IFERROR(IFERROR(FIND("/",MID(A2,FIND("|",SUBSTITUTE(A2,".","|",LEN(A2)-LEN(SUBSTITUTE(A2,".","")))),10)),FIND("?",MID(A2,FIND("|",SUBSTITUTE(A2,".","|",LEN(A2)-LEN(SUBSTITUTE(A2,".","")))),10))),LEN(MID(A2,FIND("|",SUBSTITUTE(A2,".","|",LEN(A2)-LEN(SUBSTITUTE(A2,".","")))),10))+1)-1))-FIND(MID(E2,IFERROR(FIND("|",SUBSTITUTE(LEFT(A2,FIND(".",A2)-1),"/","|",LEN(LEFT(A2,FIND(".",A2)-1))-LEN(SUBSTITUTE(LEFT(A2,FIND(".",A2)-1),"/","")))),0)+1,30),A2))
这有点难以解释,所以我也上传了逻辑方法。
首先,我想找到first .
,然后删除前缀,然后找到第一个好措辞的位置。请参阅我以绿色突出显示的列。
其次,我想找到last .
。但这有点棘手。您不知道它将如何结束,所以我添加了10个字符(您可以更改为更大的值)。然后我找到/
或?
(从您的示例中,我相信/
总是先行)或包括所有单词,如果这两个字符不存在。然后我可以检索最后一个好的字符串并找到位置。这些都是在那些黄色列中完成的。
最后,在蓝色栏目中。我简单地将所有公式合并到一个单元格中,以显示起点和终点。顺便说一句,您还可以在row 18
中看到相关的公式。
我从这个练习中学到了一些技巧:
LEN(A2)-LEN(SUBSTITUTE(A2,"/",""))
可帮助您查找字符串中有多少/
(替换此字符以找到您想要的字符)。
=SUBSTITUTE(A2,"/","|",LEN(A2)-LEN(SUBSTITUTE(A2,"/","")))
可以找到该字符串中的最后一个/
(替换此字符以找到您想要的那个)字符。请注意我在这里使用|
只是因为这个角色很少见,但你可以使用你认为它不会出现在你的字符串中的任何一个。
希望这有帮助。