Python正则表达式用起始单词

时间:2015-05-08 17:53:44

标签: regex python-2.7

这可能是我遗漏的那些简单的事情之一,但我找不到可以解决我的问题的解决方案。

我有两个字符串,格式如下:

   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

4 个答案:

答案 0 :(得分:4)

使用行结束锚$和贪婪匹配.*

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

答案 1 :(得分:2)

您可以使用“$”来匹配“行尾”,因此“开始。* $”应该这样做。

答案 2 :(得分:2)

另外..你可以在你的正则表达式中删除?(非贪婪)..它将匹配到默认结束..(贪婪,不需要在这里使用$

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

请参阅DEMO

<强>输入:

'87, 72 Start I am a sentence finish'

<强>输出:

>>> 87, 72

答案 3 :(得分:1)

如果您只需要字符串开头的数字,可以使用:

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