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.

È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top