我编写了Python脚本,它循环遍历txt文件,并试图在每一行中查找域。
regex所需经费:
这是-> 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是错误的或可能是更好的,我将很高兴得到您的回答。
发布于 2020-09-05 03:45:04
请注意,域名必须遵循一些规则才能使其有效。下面的regex只是假设一个域是有效的,如果它的顶级域只是小写字母。
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您可以使用regexr.com中的这种模式进行测试。
您还可以为url的path部分尝试使用不同的组,并允许除空格以外的任何字符(同样,不是根据url格式规则,而是适用于这种情况)。
pat = r'(?:https?)?(?::\/\/)?[\w\.-]+\.(?:[a-z]+)(?:\/[\S]*)*'https://stackoverflow.com/questions/63750094
复制相似问题