2015-05-08 34 views
2

這可能是我錯過的那些簡單的事情之一,但我一直沒能找到解決方案來解決我的問題。Python正則表達式用起始詞替換句子

我有兩個字符串是以下格式:

S1 = '87,72開始我是一個句子結束 '
S2 = '93,83開始我是一個句末'

按照這個答案,Replace all text between 2 strings python,我可以在給出開始和結束單詞時替換一個短語,如下所示。

import re 
s1 = '87, 72 Start I am a sentence finish' 
s2 = '93, 83 Start I am a sentence end' 

print(re.sub("Start.*?finish", '', s1, re.DOTALL).strip()) 
print(re.sub("Start.*?end", '', s2, re.DOTALL).strip()) 

>>> 87, 72 
>>> 93, 83 

在我的情況,我會有條件開始詞是相同的,但結束詞可能是不同的。

是否可以通過僅提供起始單詞來替換所需的短語?

我試過這個,但它只替換了開始的單詞。

s1 = '87, 72 Start I am a sentence finish' 
print(re.sub("Start.*?", '', v1, re.DOTALL).strip()) 

>>> 87, 72 I am a sentence finish 

回答

3

使用線錨$的端部和貪婪匹配.*

print(re.sub("Start.*$", '', v1, re.DOTALL).strip()) 

參見demo

Sample code

import re 
p = re.compile(ur'Start.*$') 
test_str = u"87, 72 Start I am a sentence finish" 
result = re.sub(p, "", test_str).strip() 
print result 

輸出:

87, 72 
2

您可以使用「$」來匹配「行尾」,因此「Start。* $」應該這樣做。

2

另外..你可以刪除?(非貪婪)在你的正則表達式..它會匹配,直到結束默認..(貪婪,沒有必要使用$這裏)

print(re.sub("Start.*", '', v1, re.DOTALL).strip()) 

DEMO

輸入:

'87, 72 Start I am a sentence finish' 

輸出:

>>> 87, 72 
1

若y OU只需要在字符串的開頭的號碼,你可以使用:

s1 = '87, 72 Start I am a sentence finish' 
print(re.sub(" Start.*$", '', s1)) 

輸出:

87, 72 

正則表達式的解釋:

Start.*$ 

Match the character string 「 Start」 literally « Start» 
Match any single character that is NOT a line break character «.*» 
    Between zero and unlimited times, as many times as possible, giving back as needed (greedy) «*» 
Assert position at the end of the string, or before the line break at the end of the string, if any «$» 

正則表達式演示:

https://regex101.com/r/gV9kJ6/1


Python的演示:

http://ideone.com/XU02Gf