Magazine Internet

Extraire un hashtag : Le regex

Publié le 04 mai 2014 par Aymen |eon|
Une expression régulière (regex) pour extraire un ou plusieurs hashtags d'un tweet, j'en ai essayé plusieurs. En cherchant sur le web, j'en ai vu plusieurs aussi, sauf que la majorité ne convient pas aux critères de mon petit test.
Extraire un hashtag : Le regex
-Un hashtag ne contient pas des caractères spéciaux
-Un hashtag peut contenir le caractère "_"
-Un hashtag commence par un caractère alphabétique mais peut contenir ou finir par [1..9]
-Un hashtag est une chaine de caractère avec deux espaces à droite et à gauche
-Du coup, ces hashtags ne sont pas valides :
#1Test
#!Test
#Tes!t
#Test!
#Test#

-Ce que les développeurs oublient, c'est qu'un tweet peut contenir une url de ce genre:
http://site.com/#Test

Avec les critères ci-dessus, je suis arrivé à cet hashtag:
(?:^|\s)\s*(#[A-Za-z][A-Za-z0-9-_]+)

Notez bien que j'utilise Python.
Comme tweet de test, j'ai utilisé le suivant:
#test1 #test2 #test3 url/#test4

Code :
>>> regex = re.compile("(?:^|\s)\s*(#[A-Za-z][A-Za-z0-9-_]+)",re.MULTILINE)
>>> r = regex.search(string)
>>> r
<_sre .sre_match="" 0x83e0cc9cfe7fcef0="" at="" object="">
>>> regex.match(string)
<_sre .sre_match="" 0x83e0cc9cfe7fc770="" at="" object="">
# List the groups found
>>> r.groups()
(u'#test1',)
# List the named dictionary objects found
>>> r.groupdict()
{}
# Run findall
>>> regex.findall(string)
[u'#test1', u'#test2', u'#test3']
# Run timeit test
>>> setup = ur"import re; regex =re.compile("(?:^|\s)\s*(#[A-Za-z][A-Za-z0-9-_]+)",re.MULT ...
>>> t = timeit.Timer('regex.search(string)',setup)
>>> t.timeit(10000)
0.00636506080627


Image via 

Retour à La Une de Logo Paperblog

A propos de l’auteur


Aymen |eon| 867 partages Voir son profil
Voir son blog

l'auteur n'a pas encore renseigné son compte l'auteur n'a pas encore renseigné son compte

Dossier Paperblog

Magazines