2015-08-27 16 views
4

我有一個字符串「從a.dat';」複製表a(no = 1,name = xyz,city = c0nl)。 在此我想刪除'copy'和'from'中的單詞,但需要將文件名稱作爲: 我希望的輸出是「從a.dat複製a」;如何使用python正則表達式在一個字符串中的特定單詞前後刪除文本

任何幫助將是偉大的。我想用正則表達式。

+0

你想爲「hi copy copybook fromasdf from a.dat」和「hi copybook is copy not from c.dat」輸出什麼? –

+0

還不清楚。 'a'總是文件名的一部分嗎?你可以有:「從bar.dat拷貝表foo ....或者它總是」從foo.dat拷貝表foo ...「? –

回答

5

可以結合使用正則表達式模塊re和功能sub(替換/代替)與先行(?=from)和回顧後(?<=copy) - 也被稱爲lookaround,以僅除去附帶所請求的部分(.*)在兩者之間:

import re 
print re.sub(r'(?<=copy)(.*)(?=from)', '', "copy table values from 'a.dat';") 

輸出

copy from 'a.dat'; 
+0

它的工作..謝謝! – Laawanya

+0

現在,如果字符串是「abc.dat'\ g」複製表abc,我該如何刪除'表',但可以保留它的表名。我的意思是如何實現輸出「從abc.dat'\ g」複製abc。我很困惑,因爲在所有的複製語句中表名都是不同的。 – Laawanya

+0

@Laawanya:你應該編輯你的問題。 –

0
(?<=\bcopy\b)[\s\S]*?(?=\s*\bfrom\b) 

使用\blookarounds。參見演示。

https://regex101.com/r/sS2dM8/11

import re 
p = re.compile(r'(?<=\bcopy\b)[\s\S]*?(?=\s*\bfrom\b)', re.MULTILINE) 
test_str = "copy table values from 'a.dat';" 
subst = "" 

result = re.sub(p, subst, test_str) 

輸出:copy from 'a.dat';

+0

這對我來說也是工作.. :-) – Laawanya

+0

@Laawanya與上述解決方案的問題是'asdcopy asd悲傷fromsds'將'asd悲傷'。你想要這個嗎? – vks

0

你可以這樣做:

import re 
mystr = "copy table values from 'a.dat';" 
print(re.sub('copy.*from', 'copy from', mystr)) 

而且你不必擔心空間,greedyness和所有。

+0

@巴塞爾,我試過了,但我編輯的內容被拒絕了。 :(所以不能修改它。爲了清楚起見,我會再次問下面的問題:輸入字符串是「從a.dat \ g」複製表a(no = 10,name =「kavya」),並且所需的輸出是:「從a.dat複製一個\ g」 – Laawanya

相關問題