删除字符串中括号之间的内容
我有一个这样的字符串:
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'