正则表达式在字符串中查找括号

时间:2015-06-10 19:59:36

标签: python regex

我有一个包含多个括号的字符串。我们说

s="(a(vdwvndw){}]"

我想将所有括号提取为单独的字符串。

我试过了:

>>> brackets=re.search(r"[(){}[]]+",s)
>>> brackets.group()

但它只给了我最后两个括号。

'}]'

为什么?它不应该获取字符集中任何一个或多个括号吗?

4 个答案:

答案 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]))
((){}]