2010-02-14 15 views
10

Ho una frase. Voglio trovare tutte le occorrenze di una parola che iniziano con un carattere specifico in quella frase. Sono molto nuovo alla programmazione e Python, ma da quel poco che so, sembra una domanda Regex.Simple Python Regex Trova modello

Qual è la partita codice di modello che mi permette di trovare tutte le parole che corrispondono alla mia schema?

Molte grazie in anticipo,

Brock

risposta

14
import re 
print re.findall(r'\bv\w+', thesentence) 

stamperà ogni parola nella frase che inizia con 'v', per esempio.

Utilizzando il metodo di stringhe split, come suggerisce un'altra risposta, non identificherebbe parole, ma pezzi separati da spazi, che possono includere punteggiatura. Questa soluzione basata su refa identifica le parole (lettere e cifre, al netto della punteggiatura).

+0

Questo sembra un ottimo approccio, in quanto voglio evitare le virgole direttamente dopo una parola. Il mio problema è che non riesco a farlo funzionare se voglio che la parola inizi con il simbolo @. Idee? Grazie – Btibert3

+0

aggiungi un '@?' - un'occorrenza facoltativa di ''@'' all'inizio del modello regex ', prima di '\ b' (puoi effettivamente omettere quel' \ b', poiché '@ 'allora' v' sarà _always_ significa un limite di parole, non c'è bisogno di controllare ;-). –

+0

Questo funziona perfettamente per me. Puoi escogitare un metodo per controllare anche il carattere finale ?. Nel mio caso la stringa termina con un numero. – cutteeth

1
>>> sentence="a quick brown fox for you" 
>>> pattern="fo" 
>>> for word in sentence.split(): 
...  if word.startswith(pattern): 
...   print word 
... 
fox 
for 

Spalato la frase sugli spazi, utilizzare un ciclo per cercare il modello e stamparli.

1

I secondo la raccomandazione Dive Into Python. Ma in pratica:

m = re.findall(r'\bf.*?\b', 'a fast and friendly dog') 
print(m) 

\ b significa limite di parola e. *? assicura che memorizziamo l'intera parola, ma facciamo marcia indietro per evitare di andare troppo lontano (tecnicamente,? viene chiamato un operatore pigro).

1

Si potrebbe fare (non usa re però):

matching_words = [x for x in sentence.split() if x.startswith(CHAR_TO_FIND)] 

espressioni regolari lavorano troppo (vedere le altre risposte), ma penso che questa soluzione sarà un po 'più leggibile, e come un principiante di apprendimento Python, troverai la comprensione delle liste (come la soluzione sopra) importante per ottenere un livello di comfort.