Python正则表达式再探 - 匹配URL

15 投票
7 回答
100444 浏览
提问于 2025-04-16 21:40

我有这样一个正则表达式:

 re.compile(r"((https?):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)", re.MULTILINE|re.UNICODE)

但是它没有包含 哈希bang (#!)。我需要改什么才能让它正常工作?我知道我可以在一个包含 #@% 等的组里加上 !,但是那样会选中像这样的内容:

Check this out: http://example.com/something/!!!

而我想避免那种情况。

7 个回答

6

这是一个常见的问题。可以使用默认的库来解决。

如果你在用Python,可以使用urlparse这个工具。

10

这段内容可能有点长,但实际上我的这个方法效果挺不错的。请试试这个:

((http|https)\:\/\/)?[a-zA-Z0-9\.\/\?\:@\-_=#]+\.([a-zA-Z]){2,6}([a-zA-Z0-9\.\&\/\?\:@\-_=#])*

它可以匹配下面所有的例子:

http://wwww.stackoverflow.com
abc.com
http://test.test-75.1474.stackoverflow.com/
stackoverflow.com/
stackoverflow.com
rfordyce@broadviewnet.com
http://www.example.com/etcetc
www.example.com/etcetc
example.com/etcetc
user:pass@example.com/etcetc
(www.itmag.com)
example.com/etcetc?query=aasd
example.com/etcetc?query=aasd&dest=asds
http://stackoverflow.com/questions/6427530/regular-expression-pattern-to-
match-url-with
www/Christina.V.Scott@gmail.com
line.lundvoll.nilsen@telemed.no.
s.hossain@unsw.edu.au
s.hossain@unsw.edu.au
21

别自己去写匹配网址的正则表达式。可以用别人已经解决过这个问题的,比如这个

撰写回答