python - 使用正则表达式删除日期周围的括号

标签 python regex

假设我有一个像这样的字符串:

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/

相关文章:

使用正则表达式 (ATL >> NET) 解析 C# 子字符串?

Python:NameError:未定义全局名称 'dot_parser'

python - 如何使用 PyGObject 为整个应用程序设置图标

python - 如何使用 Python 在二进制文件中查找 float ?

javascript - 句子中每个单词的匹配模式

arrays - Brain Bender ...数组公式不使用 FILTER 函数填充单元格

Python gevent pool.join() 永远等待

python - 无法在 Python (Django) 中模拟函数

python minidom - 从同名的父节点获取数据

regex - grep 和 sed 正则表达式含义 - 从网页中提取 url