查找字符串中的所有 URL,包括连字符



我正在寻找可以找到以下所有网址的正则表达式:

hello.comhello1.com1hello.comhello-1.comhello-hi1.com1hello-hi.comh3ll0.com

我已经尝试了几种不同的正则表达式,但似乎没有什么是完全正确的。

regex = re.compile('w+.(com|org|net)')
data = regex.search(string)
url = data.group(0)

我希望它返回上述所有网址

您可以在

正则表达式中添加此部分(-w+)*,这将允许它在URL的域名部分具有可选的连字符。您可以使用此网址,

w+(?:-w+)*.(?:com|org|net)
   ^^^^^^^^^ this allows the URL to have optional hyphen

演示

您应该使组不捕获,除非您确实需要它们,因为它可以提高其性能。

可以尝试用"."分隔符拆分字符串,然后检查该值是否在白名单中,例如 ['com', 'org', 'net', 'io' ....]

例如

whitelist = {'com', 'org', 'net', 'io'}
possible_url = 'hello.com'
if possible_url.split('.')[-1] in whitelist:
    return True
使用

简单的正则表达式可能会导致您意外匹配单词。 例如,简单地使用 demo#1 即可满足您的要求[w-]+.(com|org|net)但会错过所有其他域、错过子域并匹配普通单词。

这个正则表达式可能更适合bw[-.w]+.(com|org|net)b演示#2

最新更新