2012-02-10 11 views

risposta

27

È possibile utilizzare regular expressions per quello.

>>> st = "alpha here is my text bravo" 
>>> import re 
>>> re.findall(r'alpha(.*?)bravo',st) 
[' here is my text '] 

mio file test.txt

alpha here is my line 
yipee 
bravo 

Ora utilizzando open di leggere il file e di applicare regular expressions.

>>> f = open('test.txt','r') 
>>> data = f.read() 
>>> x = re.findall(r'alpha(.*?)bravo',data,re.DOTALL) 
>>> x 
[' here is my line\nyipee\n'] 
>>> "".join(x).replace('\n',' ') 
' here is my line yipee ' 
>>> 
+1

+1: questo è dove le espressioni regolari eccellono. – jathanism

+0

-1 (1) x non è definito (2) modulo di inputoutput ?? –

+0

@JohnMachin: risolto il problema 'x'. – RanRag

2

Invece di utilizzare l'espressione regolare, utilizzare il metodo Python string.find.

>>>> unique_word_a = 'alpha' 
>>>> unique_word_b = 'bravo' 
>>>> s = 'blah blah alpha i am a good boy bravo blah blah' 
>>>> your_string = s[s.find(unique_word_a)+len(unique_word_a):s.find(unique_word_b)].strip() 
i am a good boy 
+1

quali modifiche devo fare se ho più occorrenze di una parola univoca e una parola univoca b. Come faccio a creare un indice per cercare tra la quinta occorrenza della parola unica a e la parola unica b? – Amistad

9
a = 'alpha' 
b = 'bravo' 
text = 'from alpha all the way to bravo and beyond.' 

text.split(a)[-1].split(b)[0] 
# ' all the way to ' 
+3

Puoi aiutare dividere aggiungendo un conteggio di 1, quindi smetterà di cercare altre istanze su cui suddividere: 'text.split (a, 1)' – PaulMcG

6

str.find e suo fratello hanno rfindstart e end args.

alpha = 'qawsed' 
bravo = 'azsxdc' 
startpos = text.find(alpha) + len(alpha) 
endpos = text.find(bravo, startpos) 
do_something_with(text[startpos:endpos] 

Questo è il modo più veloce se il testo contenuto è corto e vicino alla parte anteriore.

Se il testo contenuto è relativamente grande, utilizzare:

startpos = text.find(alpha) + len(alpha) 
endpos = text.rfind(bravo) 

Se il testo contenuto è breve e verso la fine, uso:

endpos = text.rfind(bravo) 
startpos = text.rfind(alpha, 0, endpos - len(alpha)) + len(alpha) 

Il primo metodo è comunque meglio il metodo ingenuo di iniziare la seconda ricerca dall'inizio del testo; usalo se il tuo testo contenuto non ha uno schema dominante.

Problemi correlati