如何使我的Python替代品不贪心?

时间:2019-06-11 16:48:06

标签: python regex

我的Python subn太贪婪。我正在修改OFX字符串中包含的OFX文件(XML或SGML)。

我想删除任何包含特定硬编码CUSIP的买卖,并且不影响其他任何买卖。买入以[BUYMF]开始,以下一个[/ BUYMF]结束。卖出以[SELLMF]开始,以下一个[/ SELLMF]结束。如果其中一个包含123456789,我想从ofx字符串中删除每个。

我在字符串中的所有通配符后面添加了问号

(ofx,sub_count)= re.subn( \
   r'<(SELLMF|BUYMF)>.*?<UNIQUEID>\s*?123456789.*?</(SELLMF|BUYMF)>' \
   ,'',ofx,  flags=re.MULTILINE | re.DOTALL)

我希望只会删除买卖交易,但相反 一大笔交易被删除了。

在我标记解决方案并更正后进行编辑: 所有批评和评论都是正确且非常有用的。谢谢。

1 个答案:

答案 0 :(得分:0)

(ofx,sub_count)= re.subn( \
 r'<(SELLMF|BUYMF)>(?:(?!MF>).)*<UNIQUEID>\s*?123456789(?:(?!MF>).)*</(SELLMF|BUYMF)>' \
   ,'',ofx,  flags=re.MULTILINE | re.DOTALL)

如上修改的作品。我发现我的第一个“解决方案”存在缺陷。 可能会有更好的解决方案。感谢所有发表评论的人。