我的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)
我希望只会删除买卖交易,但相反 一大笔交易被删除了。
在我标记解决方案并更正后进行编辑: 所有批评和评论都是正确且非常有用的。谢谢。
答案 0 :(得分:0)
(ofx,sub_count)= re.subn( \
r'<(SELLMF|BUYMF)>(?:(?!MF>).)*<UNIQUEID>\s*?123456789(?:(?!MF>).)*</(SELLMF|BUYMF)>' \
,'',ofx, flags=re.MULTILINE | re.DOTALL)
如上修改的作品。我发现我的第一个“解决方案”存在缺陷。 可能会有更好的解决方案。感谢所有发表评论的人。