从字符串中删除括号内的内容

时间:2011-07-28 10:12:40

标签: python string

我有一个这样的字符串:

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

如何删除括号中的所有内容,以便输出为:

'word1 word2 word5 word6 word9 word10'

我尝试了正则表达式,但这似乎不起作用。有什么建议吗?

最佳

雅克

5 个答案:

答案 0 :(得分:6)

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'

答案 1 :(得分:1)

我的解决方案更好,因为它删除了额外的空格字符; - )

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

编辑:你是写的,它没有捕捉到所有情况。当然,我可以编写更复杂的表达式,试图考虑更多细节:

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

如果原始字符串受括号和空格限制,则结果为所需字符串或“”。

答案 2 :(得分:0)

你应该用空字符串替换所有出现的这个正则表达式:\([^\)]*\)

答案 3 :(得分:0)

你可以逐字逐句地完成它。如果你保留一个作为结果字符串的字符串,一个作为discard字符串的字符串,以及你现在是否正在删除的布尔值。

然后,对于每个字符,如果布尔值为true,则将其添加到删除字符串中,如果它为false,则将其添加到实际字符串中。如果它是一个开放式括号,你将它添加到删除字符串并将布尔值设置为true;如果它是一个小括号,你将删除字符串设置为“”并将布尔值设置为false。

最后,如果有一个括号打开但未关闭,最后会留下删除字符串。

如果要处理多个括号,请使用已打开但未关闭的整数计数,而不是布尔值。

答案 4 :(得分:0)

如果您的行的格式总是与您显示的那种格式相同,那么您可以尝试不使用正则表达式:

>>> s.replace('(','').replace(')','')
'word1 word2 word3 word4 word5 word6 word7 word8 word9 word10'

这比常规表达快4倍

>>> t1 = timeit.Timer("s.replace('(','').replace(')','')", "from __main__ import s")
>>> t2 = timeit.Timer("sub(r'\(.*?\)\ *', '', s)", "from __main__ import s; from re import sub")
>>> t1.repeat()
[0.73440917436073505, 0.6970294320000221, 0.69534249907820822]
>>> t2.repeat()
[2.7884134544113408, 2.7414613750137278, 2.7336896241081377]