python - python regex re.sub:删除模式之前或之后的所有内容,直到以两种方式找到特定条件
问题描述
如果两个大写字母之间有“年份”,我正在尝试删除它们之间的所有内容。
这是我所拥有的:
import re
string = 'Sep 09 2018*57.10*58.05*Sep 08 2018*56.76*54.91*Sep 07 2018*58.14*55.20*Sep 06 2018*55.07*54.66*Sep 06 2018*0.91 higher than last year, blablabla*Sep 05 2018*54.71*53.70'
string = re.sub(r'([A-Z].*year)(.*?)(?=[A-Z])', '*', string)
而且,我期望得到:
string = 'Sep 09 2018*57.10*58.05*Sep 08 2018*56.76*54.91*Sep 07 2018*58.14*55.20*Sep 06 2018*55.07*54.66*Sep 05 2018*54.71*53.70'
因此,我“删除”了“year”之前的第一个大写字母之前的所有内容,以及下一个之前的所有内容,这意味着“*Sep 06 2018*0.91 比去年高 0.91,blablabla”,但我的代码是从头开始的,而不是从“年”开始,然后向后看。我已经在“一年”之后解决了。
感谢是否有人可以帮助我解决这个问题。
解决方案
您可以使用
[A-Z][^A-Z]*year[^A-Z]*(?=[A-Z])
查看正则表达式演示
细节
[A-Z]
- 一个大写字母[^A-Z]*
- 0+ 个字符而不是大写字母year
- 一个字[^A-Z]*
- 0+ 个字符而不是大写字母(?=[A-Z])
- 在当前位置的右侧,应该有一个大写字母。
在 Python 中,使用
string = re.sub(r'[A-Z][^A-Z]*year[^A-Z]*(?=[A-Z])', '', string)
推荐阅读
- qt - 不能 qmake QtWebengine - “qtwebenginecore-config.pri:没有这样的文件或目录”
- node.js - WebSocket 握手期间出错:意外的响应代码:https 上的 400
- angular - 如何将逗号分隔值拆分为角度表格
- javascript - 将图例和节点更改为圆形图像
- swift - 有没有办法让小部件捕获 UNUserNotificationCenterDelegate?迅速
- oracle - 如何使用 UTL_FILE 包在地图驱动器上写入文件?
- dart - 等待和完成者之间的飞镖关系
- mongodb - 使用 ObjectId 作为本地和外部字段的集合的 Mongodb 查找查询?
- twilio - Twilio Studio - 消息服务 + 收件箱
- graphql - 如何将 AppSync GraphQL 公开?