python - 如何使我的 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)
我预计只会删除买卖交易,但会删除大量交易。
在我标记我的解决方案然后更正它之后进行编辑:所有批评和评论都是正确的并且非常有用。谢谢。
解决方案
(ofx,sub_count)= re.subn( \
r'<(SELLMF|BUYMF)>(?:(?!MF>).)*<UNIQUEID>\s*?123456789(?:(?!MF>).)*</(SELLMF|BUYMF)>' \
,'',ofx, flags=re.MULTILINE | re.DOTALL)
按照上面的修改工作。我发现我的第一个“解决方案”有缺陷。可能有更好的解决方案。感谢所有评论的人。
推荐阅读
- r - 真正了解 lapply 等人
- jquery - 在 Ruby on Rails 中使用 <%= %> 时如何删除周围的引号 (")?
- c - 布尔变量在 if else 比较器中共享相同值的问题
- javascript - 在“地理位置”中设置时,enableHighAccuracy 是否应该有所作为?
- r - 消除 R 中的异常数据点
- laravel - 该路线不支持 DELETE 方法,laravel 7,但我的方法不是 DELETE
- c# - ActionResult 上的 Httpost 方法无法存储数据
- loops - 为列表中的每个元素添加单独的 Terraform 参数
- python - 如何调整 QMovie 的大小?
- php - 未找到接口“Ratchet\MessageComponentInterface”