Come posso prendere tutti i termini che iniziano con '#'?
Domanda
Ho una stringa in questo modo: "sometext #Syrup #nshit #thebluntislit"
e voglio ottenere un elenco di tutti i termini che iniziano con '#'
ho usato il seguente codice:
import re
line = "blahblahblah #Syrup #nshit #thebluntislit"
ht = re.search(r'#\w*', line)
ht = ht.group(0)
print ht
e ottengo il seguente:
#Syrup
mi chiedevo se c'è un modo che ho potuto invece avere una lista come:
[#Syrup,#nshit,#thebluntislit]
per tutti i termini che iniziano con '#' invece di solo il primo termine.
Soluzione
appare come re.findall()
farà quello che vuoi.
matches = re.findall(r'#\w*', line)
Altri suggerimenti
espressioni regolari non è necessaria con buoni linguaggi di programmazione come Python:
hashed = [ word for word in line.split() if word.startswith("#") ]
È possibile utilizzare
compiled = re.compile(r'#\w*')
compiled.findall(line)
Output:
['#Syrup', '#nshit', '#thebluntislit']
Ma c'è un problema. Se si cerca la stringa come 'blahblahblah #Syrup #nshit #thebluntislit beg#end'
, l'uscita sarà ['#Syrup', '#nshit', '#thebluntislit', '#end']
.
Questo problema può essere affrontato utilizzando lookbehind positivo:
compiled = re.compile(r'(?<=\s)#\w*')
(non è possibile utilizzare \b
(confine di parola) qui dal #
non è tra i simboli
\w
[0-9a-zA-Z_]
che può costituire la parola che confine è da ricercare).