替换两个子串之间的单词(保留其他单词)

时间:2016-07-21 09:42:52

标签: python regex

我试图替换一个单词(例如on),如果它落在两个子串之间(例如<temp>&amp; </temp>),但是其他单词存在需要保持。

string = "<temp>The sale happened on February 22nd</temp>"

替换后的所需字符串为:

Result = <temp>The sale happened {replace} February 22nd</temp>

我尝试过使用正则表达式,我只能弄清楚如何替换两个<temp>标记之间的所有内容。 (由于.*?

result  = re.sub('<temp>.*?</temp>', '{replace}', string, flags=re.DOTALL)

on可能会出现在字符串的后面而不是<temp></temp>之间,我不想替换它。

2 个答案:

答案 0 :(得分:1)

re.sub('(<temp>.*?) on (.*?</temp>)', lambda x: x.group(1)+" <replace> "+x.group(2), string, flags=re.DOTALL)

输出:

<temp>The sale happened <replace> February 22nd</temp>

修改

根据Wiktor和HolyDanna的建议改变了正则表达式。

P.S:Wiktor对该问题的评论提供了更好的解决方案。

答案 1 :(得分:0)

尝试lxml

from lxml import etree

root = etree.fromstring("<temp>The sale happened on February 22nd</temp>")
root.text = root.text.replace(" on ", " {replace} ")
print(etree.tostring(root, pretty_print=True))

输出:

<temp>The sale happened {replace} February 22nd</temp>