python - 具有 Python 协议的域的正则表达式
问题描述
我编写了循环遍历 txt 文件的 Python 脚本,它试图在每一行中查找域。
正则表达式的要求:
- 包含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."
关键是,我无法合并这两者。我是正则表达式的新手,所以如果现有正则表达式的上述行是错误的或可能更好,我会很高兴你的回答。
解决方案
请注意,域名必须遵循一些规则才能有效。下面的正则表达式只是假设一个域是有效的,如果它的顶级域只是小写字母。
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')
输出
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
您还可以尝试为path
url 的一部分使用不同的组,并允许除空格以外的任何字符(同样,不是根据 url 格式规则,而是适用于这种情况)。
pat = r'(?:https?)?(?::\/\/)?[\w\.-]+\.(?:[a-z]+)(?:\/[\S]*)*'
推荐阅读
- c - 在 Visual Studio 上使用 Keccak 代码包
- wpf - Prism 7.1:没有合适的方法来覆盖方法 RegisterTypes 和 CreateShell
- android - 找不到 support-media-compat.aar
- python - 求解一阶 ODE,其中包含另一个 ODE(Python 中的 odeint / solve_ivp)
- java - 奇数应用程序没有正确计算负整数?
- algorithm - 设置具有最小最大交叉点大小的覆盖
- javascript - io.sockets.emit错误广播js脚本时不支持回调
- typescript - 将 Cheerio 对象映射到“本机”对象数组
- .net - 如何从 AuthorizationCodeMvcApp.AuthorizeAsync() 正确获取用户凭据?[谷歌+/Gmail API]
- c# - Schildt 的 C# book 4.0 和实际版本 c# 中的话题性