python - 如何匹配 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)
有人可以帮忙吗?谢谢。
解决方案
与其尝试使用 匹配任何非.*?
贪婪集,不如匹配不包含(
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)']
推荐阅读
- reactjs - componentdidmount 不会清空输入字段,但只有在页面刷新后才会被删除
- javascript - 初始化对象的类型不存在属性
- php - 注意:尝试获取用户级别时未定义的偏移量
- c# - 你可以让 AutoMapper 只映射明确匹配的属性吗
- python - 从 for 循环导入和调用新文件模块
- ssl - K8S 和 Traefik 在 DO 上使用有效的 SSL/HTTPS 但得到 502 网关和奇怪的日志:(
- javascript - 使用 kafka-node 消费消息时接收垃圾字符
- javascript - 为什么全局对象属性在函数后不更新?
- php - PHP:在引号内寻找 str_getcsv 换行错误的解决方法
- mysql - 身份证的真正作用是什么