首页 > 解决方案 > 如何使我的 Python 替换不贪心?

问题描述

我的 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)

我预计只会删除买卖交易,但会删除大量交易。

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

标签: pythonregex

解决方案


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

按照上面的修改工作。我发现我的第一个“解决方案”有缺陷。可能有更好的解决方案。感谢所有评论的人。


推荐阅读