我试图替换一个单词(例如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>
之间,我不想替换它。
答案 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>