如何在嵌套括号中找到字符串 假设我有一个字符串
uv(wh(x(yz))
我希望在括号中找到所有字符串(所以wh,x,yz)
import re
s="uuv(wh(x(yz))"
regex = r"(\(\w*?\))"
matches = re.findall(regex, s)
以上代码只能找到yz
我可以修改此正则表达式以查找所有匹配项吗?
答案 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']