2010-04-20 31 views
23

Attualmente sto usando le espressioni regolari per cercare tra i feed RSS per scoprire se alcune parole e frasi sono menzionate e vorrei quindi estrarre il testo su entrambi i lati della partita. Per esempio:Python - Individuazione della posizione di una corrispondenza regolare in una stringa?

String = "This is an example sentence, it is for demonstration only" 
re.search("is", String) 

mi piacerebbe conoscere la posizione (s) di dove il 'è' sono riscontrate in modo da poter estrarre e di uscita o meno così:

1 match found: "This is an example sentence" 

lo so che sarebbe facile da fare con le divisioni, ma avrei bisogno di sapere quale fosse l'indice del primo carattere della corrispondenza nella stringa, che non so come trovare

+2

in realtà si trova "è" due volte nel tuo esempio. – extraneon

risposta

38

È possibile utilizzare .find("is"), restituirebbe la posizione di "è" nella stringa

o utilizzare .start() dal re

>>> re.search("is", String).start() 
2 

In realtà la sua partita "è" da "Th è"

Se è necessario far corrispondere per parola, si dovrebbe usare \b prima e dopo "is", \b è il limite della parola.

>>> re.search(r"\bis\b", String).start() 
5 
>>> 

per ulteriori informazioni su Python espressioni regolari, docs qui

+0

Non ho idea di quanto mi sia perso nella documentazione, fa esattamente quello che mi serviva, grazie! –

+0

Se vuoi prendere solo la parola "is", penso che 're.search (" is ", String) .start()' dovrebbe anche darsi la parola .. ovviamente ci sono anche altri esempi. – kuskmen

+0

Stai attento al fatto che re.search restituisce None se non c'è corrispondenza. – rstackhouse

19

Non credo che questa domanda è stato completamente alcuna risposta perché tutti le risposte forniscono solo esempi di corrispondenza singola. La domanda dell'OP dimostra le sfumature di avere 2 corrispondenze e una sottostringa che non dovrebbe essere riportata perché non è una parola/token.

per abbinare più ricorrenze, si potrebbe fare qualcosa di simile:

iter = re.finditer(r"\bis\b", String) 
indices = [m.start(0) for m in iter] 

Questo sarebbe restituire un elenco dei due indici per la stringa originale.

Problemi correlati