我有多个链接......
linkslist =
[https://test.com
,https://test1.example.com/exm/1/2/3/4
,https://test2.example.test.com/exm/1/2/3/4
,http://test3.com]
由此,我只需要提取以下内容,
https://test.com
https://test1.com
https://test2.com
http://test3.com
我尝试了以下内容,
if re.search("http*.com",string1):
... print "found"
答案 0 :(得分:3)
更新:感谢@Robin。它起作用了,但它与我的意图略有不同。
假设只有http或https(没有端口),这可以:
(https?://(?:\w+\.)+com)(?:/.*)?
该网址位于捕获组1中。
(?:\w+\.)+
的解释:
例如,此部分会捕获usatoday.
和entertainment.usatoday.
。网址的所有pre-domain(.com
)部分。
为了安全起见,您还可以添加开始和结束锚点:
^(https?://(?:\w+\.)+com)(?:/.*)?$
要添加不同域的可能性,请按以下方式添加:
^(https?://(?:\w+\.)+(?:com|net|org|gov))(?:/.*)?$
请注意,此问题及其副本也会有所帮助: regular expression for url
答案 1 :(得分:1)
如果您不想具体了解.com部分,可以使用它。它将匹配以http或https开头的URL,它只会匹配直到第一个正斜杠或字符串/行的结尾,包括可能存在的任何端口号。
/https?:\/\/[^\/$\s]+/i
结果如下:
https://test.com -> https://test.com
https://test1.example.com/exm/1/2/3/4 -> https://test1.example.com
https://test2.example.test.com/exm/1/2/3/4 -> https://test2.example.test.com
http://test3.com -> http://test3.com
https://test.com:8080 -> https://test.com:8080
https://test1.example.com:3000/exm/1/2/3/4 -> https://test1.example.com:3000
https://test2.example.test.com:80/exm/1/2/3/4 -> https://test2.example.test.com:80
http://test3.com:8000 -> http://test3.com:8000
如果要排除端口号,只需在不匹配的组中添加冒号:
/https?:\/\/[^\/$\s:]+/i
如果您确实想要了解.com部分,请添加最后一个:
https?:\/\/[^\/\s]+\.com
如果您只想要.com-domains,但想要包含端口号,那就可以了:
https?:\/\/[^\/\s]+\.com(:\d+)?