我正在寻找可以找到以下所有网址的正则表达式:
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