首页 > 解决方案 > 如何匹配 Python Regex 中最近括号内的字符串?

问题描述

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

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

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

我在正则表达式下面写了,但它给了我 '(A or B or C or (D (5w) E)', '(F (5w) (G or H or 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)

有人可以帮忙吗?谢谢。

标签: pythonregex

解决方案


与其尝试使用 匹配任何非.*?贪婪集,不如匹配不包含(or的非贪婪集)。所以只需将第一个.*?模式替换为[^(]*?,第二个替换为[^)]*?

>>> 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)']

推荐阅读