当我有这样的字符串时:
s1 = 'stuff(remove_me)'
我可以很容易地删除括号和使用中的文本
# returns 'stuff'
res1 = re.sub(r'\([^)]*\)', '', s1)
解释为 here .
但我有时会遇到这样的嵌套表达式:
s2 = 'stuff(remove(me))'
当我从上面运行命令时,我最终得到了
'stuff)'
我也试过:
re.sub('\(.*?\)', '', s2)
这给了我相同的输出。
我怎样才能删除外括号内的所有内容 - 包括括号本身 - 以便我也以 'stuff'
(它应该适用于任意复杂的表达式)结束?
最佳答案
注意:\(.*\)
匹配左边的第一个 (
,然后匹配任何 0+ 个字符(a 除外换行符(如果未启用 DOTALL 修饰符)直到 last )
,并且不考虑正确嵌套的括号。
要在 Python 中使用正则表达式正确删除嵌套的括号,您可以使用简单的 \([^()]*\)
(匹配 (
,然后是 (
和 )
以外的 0+ 个字符,然后是 )
)在 < em>while 阻止使用 re.subn
:
def remove_text_between_parens(text):
n = 1 # run at least once
while n:
text, n = re.subn(r'\([^()]*\)', '', text) # remove non-nested/flat balanced parts
return text
基本上:删除里面没有(
和)
的(...)
,直到找不到匹配项。用法:
print(remove_text_between_parens('stuff (inside (nested) brackets) (and (some(are)) here) here'))
# => stuff here
非正则表达式的方式也是可能的:
def removeNestedParentheses(s):
ret = ''
skip = 0
for i in s:
if i == '(':
skip += 1
elif i == ')'and skip > 0:
skip -= 1
elif skip == 0:
ret += i
return ret
x = removeNestedParentheses('stuff (inside (nested) brackets) (and (some(are)) here) here')
print(x)
# => 'stuff here'
关于python - 如何删除字符串中外括号之间的所有文本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37528373/