我需要一个正则表达式来匹配以下规则。
示例:'(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)
有人可以为此提供帮助吗?感谢。
答案 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)']