HOWTO · Python
从 Python 中的字符串中删除括号
我们可以使用字符串操作和正则表达式从 Python 中的字符串中删除一组括号。
本页内容
要从 Python 字符串中删除所有字面左括号和右括号,可以将这两个字符替换为空字符串,也可以只保留不是括号的字符。这些方法只删除括号字符本身,不会连同括号内的表达式及其内容一起删除。例如,(a + b) 中的括号消失后会变成 a + b;也就是说,文本 a + b 仍然保留。
下面的示例使用相同的输入,方便你比较四种方法:str.replace()、使用 re.sub() 的正则表达式、循环,以及结合 join() 的列表推导式。代码和输出示例保持原样;其中显示的输出文本为英文。
在 Python 中使用 str.replace() 删除字符串中的括号
对于这个具体任务,str.replace() 是一种直接的选择。字符串不可变,因此该方法会返回一个新字符串,原始值保持不变。每次调用都会替换某个子字符串的匹配项;可以将两次调用串联起来,分别处理 ( 和 )。可选参数 count 用于限制单次调用替换的匹配项数量。不提供该参数时,会替换所有匹配项。
运行此示例:
本节中的代码以及显示的标签或输出仍为英文。
text = "(This is (a) string)"
result = text.replace("(", "").replace(")", "")
print(result)
结果保留了原始文本,并删除了左右括号。这两次调用分别处理这两个字符,写法清楚;当要删除的字符已知时,无需使用模式。
在 Python 中使用正则表达式删除字符串中的括号
当要删除的字符属于更大的模式,或者模式以后可能扩展时,可以使用 re.sub()。导入 Python 的 re 模块,并依次传入模式、替换内容和输入字符串。在字符类 [()] 中,括号是按字面匹配的成员,因此它会匹配 ( 或 )。将每个匹配项替换为 "" 就会删除这些字符。
运行此示例:
本节中的代码以及显示的标签或输出仍为英文。
import re
text = "(This is (a) string)"
result = re.sub(r"[()]", "", text)
print(result)
如果只需处理两个已知的字面字符,这种方法比串联调用 str.replace() 更繁琐。正则表达式适用于能让转换规则更清晰的模式;但对于简单的字面替换,它并不总是最佳选择。
在 Python 中使用循环删除字符串中的括号
循环可以明确表达筛选规则。先创建一个空的结果字符串,然后逐个检查输入字符;只有当字符不是两个括号之一时,才将它追加到结果中。输入字符串保持不变。如果保留字符的条件还取决于其他逻辑,这种方法也很容易调整。
运行此示例:
本节中的代码以及显示的标签或输出仍为英文。
text = "(This is (a) string)"
result = ""
for character in text:
if character not in "()":
result += character
print(result)
这里的条件会检查字符是否属于双字符字符串 "()";它会排除任一括号,并保留空格及其他所有字符。对于较短的字符串,这种写法很直观。若要处理许多字符并构建结果,结合 join() 的推导式可以用更简洁的方式表达相同的筛选规则。
在 Python 中使用列表推导式和 join() 删除字符串中的括号
列表推导式会筛选出要保留的字符,并将它们组成一个列表。随后,join() 会将这些字符合并起来,中间不插入分隔符。这里,.join() 前的空字符串就是分隔符,因此相邻的保留字符会直接连在一起。join() 是在这个分隔符字符串上调用的字符串方法。
运行此示例:
本节中的代码以及显示的标签或输出仍为英文。
text = "(This is (a) string)"
characters = [character for character in text if character not in "()"]
result = "".join(characters)
print(result)
如果要删除的是少量、固定的字面字符,可选择 str.replace()。如果规则本身适合用模式表达,可选择 re.sub()。当筛选规则需要显式控制时,可使用循环;若希望简洁地筛选字符,可使用结合 join() 的列表推导式。以上四种方法都会删除字面括号并保留括号中的内容;解析嵌套括号或删除成对括号及其内容,则需要使用其他方法。