再次使用Python正则表达式-匹配url

再次使用Python正则表达式-匹配url,python,regex,Python,Regex,我有这样的regexp: re.compile(r"((https?):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)", re.MULTILINE|re.UNICODE) 但这还不包括hashbang(#!)。我需要改变什么,让它工作?我知道我可以补充!使用#@%等进行分组,但会选择以下内容 Check this out: http://example.com/something/!!! 我想避免这种情况。不要试图为匹配URL创建自己的正则

我有这样的regexp:

 re.compile(r"((https?):((//)|(\\\\))+[\w\d:#@%/;$()~_?\+-=\\\.&]*)", re.MULTILINE|re.UNICODE)
但这还不包括hashbang
(#!)
。我需要改变什么,让它工作?我知道我可以补充!使用
#@%
等进行分组,但会选择以下内容

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

我想避免这种情况。

不要试图为匹配URL创建自己的正则表达式,请使用已经解决了此类问题的其他人的正则表达式,例如。

我承认我有点担心需要这样的正则表达式来匹配URL的应用程序。也就是说,这似乎对我有用:

((https?):((//)|(\\\\))+([\w\d:#@%/;$()~_?\+-=\\\.&](#!)?)*)

这是一个常见问题,请使用默认库


对于python的使用

它可能很长,但实际上我的工作非常好。请试试这个
((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     
基于此,我们可以使用库验证程序

例如:

import validators

valid=validators.url('https://codespeedy.com/')
if valid==True:
    print("Url is valid")
else:
    print("Invalid url")

签出rfcforuri语法()怎么样?它会告诉你,爆炸只能以某些方式使用,否则它必须逃逸。好问题。我希望你没有试图使用这个正则表达式来匹配浏览器请求的URL:如果是这样,你应该意识到散列后的部分不是在正常的客户端请求中发送的。否。我正在解析用户输入,并使链接对用户来说更短、更安全(我们拥有完全控制权,我们可以阻止链接、域等)。原始正则表达式中有;)虽然使用别人的代码没有错,但编写自己的代码也没有错!:)我想,如果每个人都遵循“不要尝试自己做,用别人的”的建议,我们仍然会生活在洞穴里@mac-如果每个人都必须改造一切,我们的进步就会慢得多。更好的做法是使用他人已完成的想法,然后通过改进或添加新内容使其变得更好。甚至牛顿也承认他是在别人工作的基础上建立起来的。“马克-我当然不反对这一点,我从来没有说过每个人都应该重新发明轮子!”我只是认为没有一条很难遵循的规则:有时使用他人的作品是有意义的,有时则不然。@mac-你完全正确。然而,我们应该轻轻地推动那些编写可怕的正则表达式的人复制别人的作品,直到他们获得足够的知识,这样就不会留下别人的噩梦来维护:)链接中的正则表达式很糟糕:它试图列出2011年已知的顶级域,很快就过时了。urlparse仍然会解析OP的问题URL:urlparse.urlparse(')这是一个有效的URL,所以首先使用URL解析器来获取信息。然后你可以决定怎么处理它。我怀疑语义解析器是否真的是他想要的,更简单的是尝试url。如果不起作用,请去掉最后的字符,然后再试一次……我用我打开的示例文本
尝试了你的正则表达式https://google.com 及http://speedtest.net 还有www.standford.edu
,但我没有得到正确的结果。这就是我获得
[('https://','https','m','')('http://','http','t','','',('','u','')的方式。
这取决于您是否在尝试。如果您正在使用python(不需要反斜杠\chars)或jave或其他东西。请在此处尝试他的方法。不幸的是,这种方法与一些意外字符串相匹配,如
匹配。如果您有.any.point,但不一定是.a.site
,您可以粘贴到pythex.org上,查看它是否无法识别
https://google/
可以用作有效的URL。您的正则表达式在结尾需要一个
.com
.net