python - 使用正则表达式删除日期周围的括号
问题描述
假设我有一个这样的字符串:
这是我的 (2019) 真棒字符串(我想修改)
其中的日期必须保留,但没有括号。同时,括号中的其他所有内容都必须删除。所以我想实现这一点:
这是我的 2019 年很棒的字符串
我可以使用以下方法找到日期:
\b(201\d{1})\b
而且我还可以使用以下方法在括号中找到任何内容:
(\(.*\))
但如果不是括号中的日期,我只想删除所有内容,否则我想保留仅删除括号的日期。有没有办法在不使用的情况下做到这一点if else
?
解决方案
在 Python 3.5+ 中,您可以使用
s = re.sub(r'\((\d{4})\)|\([^()]*\)', r'\1', s)
如果有(
+ 4 位 + )
,则只保留 4 位,否则,删除匹配项。
请参阅正则表达式演示。
细节
\((\d{4})\)
-(
,然后捕获组 1 匹配四位数字,然后)
|
- 或者\([^()]*\)
- a ,然后是除and之外的(
0+ 个字符,然后是.(
)
)
替换只是\1
对第 1 组值的反向引用。
注意:要在 3.5 之前的 Python 版本中使用这种方法,您必须使用 lambda 表达式作为替换参数(由于错误):
s = re.sub(r'\((\d{4})\)|\([^()]*\)', lambda x: x.group(1) if x.group(1) else '', s)
推荐阅读
- javascript - 混合字符串和数字(地址)的Lodash排序
- javascript - 定义具有内部内容的自定义卡片组件
- node.js - 我们如何将 Dialogflow 代理 Json 文件转换为 Lex bot Json 文件?
- angularjs - 如何从 Angular 1.4 升级到 Angular 5?
- erlang - Process.whereis(:user) 返回一个 pid。这个pid是什么?
- javascript - 如何在 Java 中进行 CodeLive 搜索
- javascript - 安装nodemom node js时出现问题
- angularjs - 如何根据作为文本的单元格值在 ng-grid 中设置行颜色?
- python - 将数据框与映射中的多级列合并
- r - dplyr 在 mutate 中同时使用 rowwise 和 df-wise 值