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

如何使用RegEx移除内部内容仅为数字的成对括号()

括号内为纯数字时删除成对括号的实现方案

纯正则无法可靠处理嵌套括号的场景,更稳妥的实现方式是使用栈遍历字符串,实现逻辑如下:

  1. 遍历字符串的每一个字符,非右括号字符直接入栈
  2. 遇到右括号时,从栈顶依次弹出元素直到匹配到对应的左括号,提取出括号内的内容
  3. 校验提取的内容是否为纯数字:
    • 是纯数字:直接将数字内容入栈,省略括号
    • 不是纯数字:将括号和原内容拼接后重新入栈
  4. 遍历完成后将栈内字符拼接即为最终结果

代码实现

def remove_numeric_brackets(s):
    stack = []
    for char in s:
        if char != ')':
            stack.append(char)
            continue
        # 提取括号内内容
        content = []
        while stack and stack[-1] != '(':
            content.append(stack.pop())
        # 弹出匹配的左括号
        if stack:
            stack.pop()
        content_str = ''.join(reversed(content))
        if content_str.isnumeric():
            stack.append(content_str)
        else:
            stack.append(f'({content_str})')
    return ''.join(stack)

# 测试示例
input_str = '((1)+(1))+2+(1+2)+((2))'
output = remove_numeric_brackets(input_str)
print(output)

运行输出结果为:

(1+1)+2+(1+2)+2

如果你可以确认输入中没有嵌套括号,也可以用正则循环替换实现:

import re
def remove_numeric_brackets_re(s):
    while True:
        new_s = re.sub(r'\((\d+)\)', r'\1', s)
        if new_s == s:
            break
        s = new_s
    return s

该方案需要多次循环替换,性能低于栈实现,且仅适用于无嵌套、括号内无多余非数字字符的场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:48:02