查找嵌套括号中的所有字符串

时间:2016-11-11 16:26:38

标签: python regex string

如何在嵌套括号中找到字符串 假设我有一个字符串

uv(wh(x(yz))

我希望在括号中找到所有字符串(所以wh,x,yz)

import re
s="uuv(wh(x(yz))"

regex = r"(\(\w*?\))"
matches = re.findall(regex, s)

以上代码只能找到yz

我可以修改此正则表达式以查找所有匹配项吗?

4 个答案:

答案 0 :(得分:1)

字符串split会起作用而不是正则表达式吗?

s='uv(wh(x(yz))'
match=[''.join(x for x in i if x.isalpha()) for i in s.split('(')]
>>>print(match)
['uv', 'wh', 'x', 'yz']
>>> match.pop(0)

你可以弹出第一个元素,因为如果它包含在括号中,第一个位置将是空白的,你不会想要它,如果它不是空白则意味着它不在括号中,你不会想要它。

由于这不够灵活,这样的事情会起作用:

def match(string):
    unrefined_match=re.findall('\((\w+)|(\w+)\)', string)
    return [x for i in unrefined_match for x in i if x]

>>> match('uv(wh(x(yz))')
['wh', 'x', 'yz']

>>> match('a(b(c)de)')
['b', 'c', 'de']

答案 1 :(得分:1)

使用正则表达式,这样的模式可能会起作用:

\((\w{1,})

结果:

['wh', 'x', 'yz']

您当前的模式会逃脱( )并且不会将其视为捕获组。

答案 2 :(得分:1)

如果您知道如何从PHP正则表达式转换为Python,那么您可以使用此

\(((?>[^()]+)|(?R))*\)

答案 3 :(得分:1)

获取所有正确括号内的文字:

import re

def get_all_in_parens(text):
    in_parens = []
    n = "has something to substitute"       
    while n:
        text, n = re.subn(r'\(([^()]*)\)', # match flat expression in parens
                          lambda m: in_parens.append(m.group(1)) or '', text)
    return in_parens

示例:

>>> get_all_in_parens("uuv(wh(x(yz))")
['yz', 'x']

注意:由于不平衡的paren,结果中没有'wh'

如果括号是平衡的;它返回所有三个嵌套的子串:

>>> get_all_in_parens("uuv(wh(x(yz)))")
['yz', 'x', 'wh']
>>> get_all_in_parens("a(b(c)de)")
['c', 'bde']