Una soluzione regex per divertimento:
>>> import re
>>> re.findall(r'@(\w+)', '@Hello there @bob @!')
['Hello', 'bob']
>>> re.findall(r'@(\w+)', 'Hello there bob !')
[]
>>> (re.findall(r'@(\w+)', 'Hello there @bob !') or None,)[0]
'bob'
>>> print (re.findall(r'@(\w+)', 'Hello there bob !') or None,)[0]
None
L'espressione regolare sopra riporterà i motivi di uno o più caratteri alfanumerici seguendo un carattere '@' fino a quando non viene trovato un carattere non alfanumerico.
Ecco una soluzione regex per abbinare uno o più caratteri che non sono spazi se si desidera catturare una gamma più ampia di stringhe:
>>> re.findall(r'@(\S+?)', '@Hello there @bob @!')
['Hello', 'bob', '!']
Si noti che quando il sopra regex incontra una stringa come @[email protected]
che catturerà [email protected]
in un risultato invece di xyz
e abc
separatamente. Per risolvere questo, è possibile utilizzare la classe \s
carattere negato allo stesso tempo negare @
caratteri:
>>> re.findall(r'@([^\[email protected]]+)', '@[email protected] some other stuff')
['xyz', 'abc']
Ed ecco una soluzione regex per corrispondere a uno o più caratteri alfabetici solo nel caso in cui non si desidera alcun numero o qualsiasi altra cosa :
>>> re.findall(r'@([A-Za-z]+)', '@Hello there @bobv2.0 @!')
['Hello', 'bobv']
stavo proprio per postare questo, poiché la divisione su "@" poteva essere contorta per più nomi (come l'esempio @there) - quindi questa è una di quelle volte che raccomando una regex .... man, picchiando me punch: P;) – JGreenwell