首页 > 解决方案 > 具有 Python 协议的域的正则表达式

问题描述

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

正则表达式的要求:

正则表达式是->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."

关键是,我无法合并这两者。我是正则表达式的新手,所以如果现有正则表达式的上述行是错误的或可能更好,我会很高兴你的回答。

标签: pythonpython-3.xregex

解决方案


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

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 中使用此模式对其进行测试


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

pat = r'(?:https?)?(?::\/\/)?[\w\.-]+\.(?:[a-z]+)(?:\/[\S]*)*'

推荐阅读