2017-08-02 59 views
-2

我想在Python中使用正則表達式在文本文件中的特定字符串之前檢索所有內容。 例如與線在特定字符串之前檢索文本Python

text = 'What I want is a red car' 

我想取回一切,這是之前的「紅車」,那就是:

result = 'What I want is' 

整個字符串「紅色賽車」是很重要的,而不是隻有「紅色」或「汽車」分開!

在此先感謝!

+1

你有沒有嘗試過自己?你嘗試了什麼? – khelwood

+0

其實,這是你可以輕鬆地谷歌自己... –

+2

重複的https://stackoverflow.com/questions/12572362/get-a-string-after-a-specific-substring/12572391#12572391? –

回答

1

regex = re.compile('(?P<before_red_car>.+) a red car') 
regex.search("What i want is a red car").group('before_red_car') 

如果你不想爲您的羣組命名:

regex = re.compile('(.+)a red car') 
regex.search("What i want is a red car").group(1) 

如果需要捕捉包括換行符在內的所有內容,請添加re.DOTALL標誌。

但是,這樣做

text = 'What I want is a red car' 
text.split('a red car')[0] 

甚至:

text = 'What I want is a red car' 
text.replace('a red car', '') 

工作過了,可以說是比較容易理解。 他們也快兩倍:

timeit.timeit(lambda: text.split('a red car')[0]) 
0.5350678942020507 

timeit.timeit(lambda: text.replace('a red car', '')) 
0.5115460171814448 

timeit.timeit(lambda: regex.search("What i want is a red car").group(1)) 
1.123993800741033 

# Without re.compile() 
timeit.timeit(lambda: re.search('(.+)a red car', text).group(1)) 
1.94518623436079 
1

這可能有助於

text = 'What I want is a red car' 
print(text[0:13]) 
+0

然後如果文本被更改爲」您想要的是紅色汽車'? –

+0

你的意思是文字='你想要的是紅卡?' –

+0

準確地說,你最終會返回'你想要什麼'......我的觀點是,這個解決方案不是動態的或靈活的。此外,我剛剛測試了上述內容,並返回了「我想要的我」,這看起來不像OP想要 –

0

你可以試試這個:如果你需要使用這個正則表達式

strIn = 'What I want is a red car' 
searchStr = 'a red car' 
print(strIn[:strIn.find(searchStr)]) 
相關問題