
-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