如何移除字符串中的括号?现有re.sub写法无效求解决方案
嘿,我来帮你搞定这个问题~你之前的正则写法没效果是因为没找对正确的匹配方式,我给你拆解下原因,再给你两个实用的解决方案:
为什么你之前的写法无效?
re.sub(r"(\)", " ", document):这个正则只单独匹配右括号),而且只是把它替换成空格,左括号(完全没被处理,自然达不到移除所有括号的效果。re.sub(r"()", " ", document):这里的()是空分组,会匹配字符串里的每一个间隙(比如字符之间、开头结尾),执行后会把整个字符串插满空格,完全不是你想要的结果。
实用解决方案
方案1:移除文本中所有的括号(不管位置)
如果你的需求是把文本里所有的(和)都删掉,用正则的字符类最直接:
import re document = "(Hello World)" document = re.sub(r'[()]', '', document) print(document) # 输出: Hello World
这个方法也适用于多括号场景,比如"(Hello) (Python)"会被处理成"Hello Python"。
方案2:精准移除首尾的成对括号
如果你的文本刚好是被一对括号整个包裹的(就像你举的例子),可以用更精准的匹配,只去掉开头的(和结尾的),保留中间内容:
import re document = "(Hello World)" document = re.sub(r'^\((.*)\)$', r'\1', document) print(document) # 输出: Hello World
这里的正则逻辑:
^和$锁定字符串的开头和结尾\(和\)匹配首尾的括号(需要转义,因为(在正则里是特殊符号)(.*)捕获括号中间的所有内容,替换时用r'\1'引用捕获到的内容,就完美保留了中间文本。
内容的提问来源于stack exchange,提问作者Outcast




