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

如何用re.sub替换带括号单词但排除(k)?求解决建议

解决re.sub排除特定括号内容的问题

嘿,我来帮你搞定这个正则替换的小难题!你想要替换所有带括号的单词,但唯独保留(k),核心思路是用否定前瞻断言来精准过滤掉不需要替换的情况。

具体实现方案

基础替换(替换整个括号内容)

比如你想把所有类似(test)、(example)的内容换成自定义文本,但保留(k),可以用下面的代码:

import re

# 示例文本
input_text = "这里有(word),还有(k),再来一个(foo),最后是(bar)"
# 执行替换:替换所有带括号的单词,但排除(k)
output_text = re.sub(r'\((?!k\))\w+\)', '[已替换]', input_text)

print(output_text)
# 输出结果:这里有[已替换],还有(k),再来一个[已替换],最后是[已替换]

正则表达式拆解

  • \(:转义匹配左括号(因为括号在正则里是元字符,必须转义才能匹配字面量)
  • (?!k\)):否定前瞻断言,意思是“当前位置后面不能紧跟着k)”,这样就精准排除了(k)的情况
  • \w+:匹配括号内的单词字符(字母、数字、下划线),如果你的“单词”包含特殊字符(比如连字符、中文),可以换成[^\)]+,它会匹配左括号后到右括号前的所有非右括号字符,适用性更广
  • \):转义匹配右括号

进阶替换(只替换括号内的内容,保留括号)

如果你想保留括号,只替换里面的内容,比如把(test)变成(new_test),可以用分组捕获来实现:

output_text = re.sub(r'\((?!k\))(\w+)\)', r'(new_\1)', input_text)
print(output_text)
# 输出结果:这里有(new_word),还有(k),再来一个(new_foo),最后是(new_bar)

这里的(\w+)是捕获分组,\1代表捕获到的括号内的原内容,这样就能在保留括号的同时替换内容啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:46:33