这可能是我遗漏的那些简单的事情之一,但我找不到可以解决我的问题的解决方案。
我有两个字符串,格式如下:
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
答案 0 :(得分:4)
使用行结束锚$
和贪婪匹配.*
:
print(re.sub("Start.*$", '', v1, re.DOTALL).strip())
请参阅demo
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