Regularexpression获得.com

时间:2014-03-25 22:23:04

标签: regex

我有多个链接......

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"

2 个答案:

答案 0 :(得分:3)

更新:感谢@Robin。它起作用了,但它与我的意图略有不同。

假设只有http或https(没有端口),这可以:

(https?://(?:\w+\.)+com)(?:/.*)?

Regular expression visualization

Debuggex Demo

该网址位于捕获组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+)?