跪求高手把这段正则表达式改得比较简单一点

前些天到网上一段正则,过滤url的代码如下:

import re
url = '转载请附带本文网址:http://www.zhangte.org'
P = re.compile('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+')
P.sub('',url)

但是这段代码只可以过滤带有http的url,如果没有http,就过滤不了,比如这种url就过滤不了www.zhangte.org

所以我修改一下,变成这种正则

html = "你好www.zhangte.org"
P = re.compile('http[s]?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+|(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+')
P.sub('',html)

但是感觉整体逻辑看起来,很乱,我用的是最简单最粗暴的方式,直接用|,然后把前面的http[s]?://去掉,然后就拼接起来了,勉强可以用,但是感觉看起来太蛋疼了,有比较好的办法吗?

阅读 2k
2 个回答

将前面的http://括起来

P = re.compile('(https?://)?(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+')

格式不固定,容易误杀,提供一种方案吧...

(https?:\/\/)?([^\.\s]\.)+(com|cn|org)

后缀如果不担心误杀可以和前面分组一致,毕竟补全还是比较麻烦的

不知道为啥sf传不了图片了...一直报错,正则示意图链接
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题