假设我有一个像这样的字符串:
This is my (2019) awesome string (that I want to modify)
其中的日期必须保留,但不带括号。同时,括号中的其他所有内容都必须删除。所以我想实现这个:
This is my 2019 awesome string
我可以使用以下方法找到日期:
\b(201\d{1})\b
我还可以使用以下方法找到括号中的任何内容:
(\(.*\))
但是我只想删除括号中不是日期的所有内容,否则我只想保留日期并删除括号。有没有办法在不使用 if else
的情况下做到这一点?
最佳答案
在 Python 3.5+ 中你可以使用
s = re.sub(r'\((\d{4})\)|\([^()]*\)', r'\1', s)
如果存在(
+ 4位数字+ )
,则仅保留4位数字,否则删除匹配项。
请参阅regex demo .
详细信息
\((\d{4})\)
-(
,然后捕获匹配四位数字的组 1,然后)
<|
- 或\([^()]*\)
- 一个(
,然后是除(
和) 之外的 0+ 个字符
,然后)
。
替换只是对组 1 的值的 \1
反向引用。
注意:要在 3.5 之前的 Python 版本中使用此方法,您必须使用 lambda 表达式作为替换参数(由于 bug ):
s = re.sub(r'\((\d{4})\)|\([^()]*\)', lambda x: x.group(1) if x.group(1) else '', s)
关于python - 使用正则表达式删除日期周围的括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56272119/