删除字符串中括号之间的内容

4 投票
5 回答
4485 浏览
提问于 2025-04-16 22:25

我有一个这样的字符串:

s = 'word1 word2 (word3 word4) word5 word6 (word7 word8) word9 word10'

我想删除所有括号里的内容,最后的结果应该是:

'word1 word2 word5 word6 word9 word10'

我试过用正则表达式,但好像不太管用。有什么建议吗?

最好的,
雅克

5 个回答

0

你可以一个一个字符地处理。你需要准备一个结果字符串,一个丢弃字符串,还有一个布尔值来表示你是否正在删除。

然后,对于每个字符,如果布尔值为真,就把它加到丢弃字符串里;如果为假,就加到结果字符串里。如果遇到一个左括号,就把它加到丢弃字符串里,并把布尔值设为真;如果遇到一个右括号,就把丢弃字符串清空,并把布尔值设为假。

最后,如果有一个左括号没有对应的右括号,你就会得到一个丢弃字符串。

如果你想处理多个括号,可以用一个整数来记录你打开了多少个但还没关闭的括号,而不是用布尔值。

2

我的解决方案更好,因为它可以删除多余的空格字符;-)

re.sub( "\s\(.*?\)","",s)

编辑: 你说得对,它并不能处理所有情况。当然,我可以写一个更复杂的表达式,试着考虑更多的细节:

re.sub( "\s*\(.*?\)\s*"," ",s)

现在的结果是我们想要的字符串,或者如果原始字符串只被括号和空格包围,那就是一个空格。

7
import re
s = re.sub(r'\(.*?\)', '', s)

请注意,这个操作只会删除括号之间的内容。这意味着在“word2”和“word5”之间会留下两个空格。以下是我终端的输出:

>>> re.sub(r'\(.*?\)', '', s)
'word1 word2  word5 word6  word9 word10'
>>> # -------^ -----------^ (Note double spaces there)

不过,你提供的输出并不是这样。为了去掉多余的空格,你可以试试这样做:

>>> re.sub(r'\(.*?\)\ *', '', s)
'word1 word2 word5 word6 word9 word10'

撰写回答