我有一个包含多个括号的字符串。我们说
s="(a(vdwvndw){}]"
我想将所有括号提取为单独的字符串。
我试过了:
>>> brackets=re.search(r"[(){}[]]+",s)
>>> brackets.group()
但它只给了我最后两个括号。
'}]'
为什么?它不应该获取字符集中任何一个或多个括号吗?
答案 0 :(得分:7)
你必须逃离第一个结束的方括号。
r'[(){}[\]]+'
要将所有这些内容组合成一个字符串,您可以搜索不匹配的任何内容并将其删除。
brackets = re.sub( r'[^(){}[\]]', '', s)
答案 1 :(得分:3)
使用以下内容(关闭方括号必须转义 字符类):
brackets=re.search(r"[(){}[\]]+",s)
↑
答案 2 :(得分:1)
正则表达式"[(){}[]]+"
(或更确切地说"[](){}[]+"
或"[(){}[\]]+"
(正如其他人建议的那样))找到一系列连续字符。
您需要做的是找到所有这些序列并加入它们。
一个解决方案就是:
brackets = ''.join(re.findall(r"[](){}[]+",s))
另请注意,我重新排列了类中字符的顺序,因为]
必须位于类的开头,因此不会将其解释为类定义的结尾。
答案 3 :(得分:1)
您也可以在没有正则表达式的情况下执行此操作:
s="(a(vdwvndw){}]"
keep = {"(",")","[","]","{","}"}
print("".join([ch for ch in s if ch in keep]))
((){}]