You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何移除包含特定正则格式内容的多余括号?

移除特定日期时间格式内容的多余括号

需求

移除仅包含year_-_month_-_day hour:minute am/pm格式内容的多余括号,最终只保留一层括号包裹该内容;非此格式的括号内容(如((44_-_44)))保持不变。

原代码问题

原正则仅匹配单一层括号包裹的目标日期时间内容,无法处理多层嵌套括号的情况(比如((2022_-_02_-_18 20:00 pm))或((((2022_-_02_-_18 20:00 pm))))),导致替换操作完全没生效。

修正代码

直接匹配前后任意数量的括号,捕获中间的目标日期时间内容,再替换为一层括号包裹该内容即可:

import re

input_text = "hhhh ((44_-_44)) ggj ((2022_-_02_-_18 20:00 pm)) ((((2022_-_02_-_18 20:00 pm))) (2022_-_02_-_18 00:00 am)"

# 匹配目标日期时间格式
dt_pattern = r"\d*_-_\d{2}_-_\d{2} \d{2}:\d{2}\s*[ap]m"
# 匹配前后任意数量括号包裹的目标内容
full_pattern = r"\(*(" + dt_pattern + r")\)*"

# 替换为单一层括号
input_text = re.sub(full_pattern, r"(\1)", input_text)

print(repr(input_text))

运行结果

'hhhh ((44_-_44)) ggj (2022_-_02_-_18 20:00 pm) (2022_-_02_-_18 20:00 pm) (2022_-_02_-_18 00:00 am)'

说明

  • dt_pattern:简化后的正则,精准匹配year_-_month_-_day hour:minute am/pm格式。
  • full_pattern:\(*匹配任意数量的前置左括号,\)*匹配任意数量的后置右括号,中间的括号捕获目标内容,确保只替换完全由该日期时间格式填充的括号组。
  • 替换逻辑(\1)将捕获的日期时间内容用单一层括号包裹,直接移除多余的嵌套括号。

内容的提问来源于stack exchange,提问作者Matt095

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 09:15:59