对于我正在开发的一个更大的Python程序,我试图编写一个方法来删除由两个不同标签包围的字符串的所有部分;开始标签
r'{foo}'
和结束标签 r'{/foo}'
。如果它成功运行,它将需要一个字符串,例如:
r'stay {foo}leave{/foo} stay {foo} leave {/foo} stay'
并返回字符串:
r'stay stay stay'.
此外,如果部分不完整,它不会做任何事情。换句话说,如果您给出程序字符串:
r'stay {/foo} {foo} leave {/foo} {foo} stay'
它将返回字符串:
r'stay {/foo} {foo} stay'
这是预期的行为。
为了解决这个问题,我求助于 python re 库来创建一个正则表达式来为我做到这一点。我最接近成功的事情是使用正则表达式模式
r'{foo}.*{/foo}'
,它仅在且仅当字符串中存在一个标记部分时才有效。例如,使用模式 r'{foo}.*{/foo}'
和字符串:
r'stay {foo} leave {/foo} stay'
将按预期返回
r'stay stay'
,但如果我对第一个示例执行相同操作:
r'stay {foo}leave{/foo} stay {foo} leave {/foo} stay'
我会得到
r'stay stay'
而不是预期的结果 r'stay stay stay'
。
虽然我觉得我已经很接近弄清楚这一点了,但我对正则表达式的理解还远远不够深入。我希望得到一些帮助来解决此场景的正确正则表达式模式问题。
使用星型运算符的“非贪婪”(又名“最小”)版本,即
*?
。参考:https://docs.python.org/3/library/re.html#regular-expression-syntax
因此,将您的模式更改为:
r'{foo}.*?{/foo}'