Je suis venu à ce d'une direction légèrement différente. Je voulais émuler la capacité de gchats à correspondre something.co.uk
et le lier. Donc, je suis allé avec une regex qui cherche un .
sans une période suivante ou un espace de chaque côté, puis attrape tout ce qui l'entoure jusqu'à ce qu'il frappe les espaces. Il correspond à une période à la fin d'un URI mais je l'enlève plus tard. Donc, cela pourrait être une option si vous préférez des faux positifs sur manque certains potentiels
url_re = re.compile(r"""
[^\s] # not whitespace
[a-zA-Z0-9:/\-]+ # the protocol and domain name
\.(?!\.) # A literal '.' not followed by another
[\w\-\./\?=&%~#]+ # country and path components
[^\s] # not whitespace""", re.VERBOSE)
url_re.findall('http://thereisnothing.com/a/path adn some text www.google.com/?=query#%20 https://somewhere.com other-countries.co.nz. ellipsis... is also a great place to buy. But try text-hello.com ftp://something.com')
['http://thereisnothing.com/a/path',
'www.google.com/?=query#%20',
'https://somewhere.com',
'other-countries.co.nz.',
'text-hello.com',
'ftp://something.com']
Cette expression correspond trop (_ ne sont pas autorisés dans les noms de domaine, IIRC, URL peut arrêter après le nom de domaine) et pas assez (on peut trouver ~ et n'importe quel caractère% hh dans le chemin). – PhiLho