如何匹配Python Regex中最近括号内的字符串?

时间:2018-06-15 08:37:59

标签: python regex

我需要一个正则表达式来匹配以下规则。

示例:'(A或B或C或(D(5w)E))和(F(5w)(G或H或I))'

结果:'(D(5w)E)','(F(5w)(G或H或I))'

我写了下面的正则表达式,但它给了我'(A或B或C或(D(5w)E)','(F(5w)(G或H或I)'这是不正确的。

import re

test = '(A or B or C or (D (5w) E)) and (F (5w) (G or H or I))'

print re.findall('\((?:.*?)\(5w\)(?:.*?)\)', test)

有人可以为此提供帮助吗?感谢。

1 个答案:

答案 0 :(得分:0)

您应该匹配不包含.*?(的非贪婪集,而不是尝试使用)匹配任何非贪婪集。因此,只需将第.*?个模式替换为[^(]*?,将第二个模式替换为[^)]*?

>>> import re
>>>
>>> test=  '(A or B or C or (D (5w) E)) and (F (5w) (G or H or I))'
>>> re.findall('\((?:[^(]*?)\(5w\)(?:[^)]*?)\)', test)

['(D (5w) E)', '(F (5w) (G or H or I)']