首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >具有协议的域的Regex

具有协议的域的Regex
EN

Stack Overflow用户
提问于 2020-09-05 03:15:07
回答 1查看 64关注 0票数 0

我编写了Python脚本,它循环遍历txt文件,并试图在每一行中查找域。

regex所需经费:

  • 包含诸如http、https、www等协议。
  • 包含"-“,例如ab-cd.com
  • 包含数字、字母、其他字符、不区分大小写的字符
  • 包含URL,例如,ab.com/home

这是-> r"(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9][a-z0-9-]{0,61}[a-z0-9]",但我也想找到带有协议的域(http、https、www等)。

我试过像-> r"https://www\.|http://www\.|https://www|http://|https://|www\.|http."这样的东西

关键是,我不能把这两件事合并。我是新来的regex,因此,如果以上行的现有regex是错误的或可能是更好的,我将很高兴得到您的回答。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-05 03:45:04

请注意,域名必须遵循一些规则才能使其有效。下面的regex只是假设一个域是有效的,如果它的顶级域只是小写字母。

代码语言:javascript
复制
import re
pat = r'(?:https?)?(?::\/\/)?[\w\.-]+\.(?:[a-z]+)(?:\/[\w\.\/]*)*'
inpt = 'Hello, something like this: example.com |example.com |http://example.com |http:/example.com |https://example.site |example.site |www.example-a.org |www.example-a.org/home |Example.tyz |ex.ample.com |example.web.id |example.org/exmp.exe'
matches = re.findall(pat, inpt)

print(*matches, sep='\n')

输出

代码语言:javascript
复制
example.com
example.com
http://example.com
example.com
https://example.site
example.site
www.example-a.org
www.example-a.org/home
Example.tyz
ex.ample.com
example.web.id
example.org/exmp.exe

您可以使用regexr.com中的这种模式进行测试。

您还可以为url的path部分尝试使用不同的组,并允许除空格以外的任何字符(同样,不是根据url格式规则,而是适用于这种情况)。

代码语言:javascript
复制
pat = r'(?:https?)?(?::\/\/)?[\w\.-]+\.(?:[a-z]+)(?:\/[\S]*)*'
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63750094

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档