【发布时间】:2021-05-04 21:00:00
【问题描述】:
我很难让它发挥作用。我有一个像这样的字符串:
((a and b) and not (c and d)) 或 ((e and f and h) and not (c and d)) 或 ((h and i) and not (k and d)) 。 .....
我需要的是匹配上面的字符串并在每两个括号((我的组))之间捕获文本,例如:
- 第 1 组:((a 和 b)而不是(c 和 d))
- 第 2 组:((e 和 f 和 h)而不是(c 和 d))
- 第 3 组:(c 和 d)) 或 ((h 和 i) 而不是 (k 和 d))
并用“或”运算符分隔。
这是我的正则表达式:
(\({2}.+?\){2})(?: (?:or) (\({2}.+?\){2}))+
当我单独使用正则表达式(\({2}.+?\){2}) 时,它的第一部分匹配两个括号之间的所有组。但是,当我添加第二部分以匹配由“或”(?:or) (\({2}.+?\){2}))+ 分隔的所有组时,它不起作用 - 似乎与下面的文本匹配,这是不够的:
((a and b) and not (c and d)) and ((a and b) and not (c and d)).
感谢您的帮助
【问题讨论】:
-
你可以试试
(\(\(.*?\)\))(?:\h+or\h+|$) -
感谢您的回复,但我的问题是关于“或”运算符,我需要匹配所有字符串然后捕获组。如果整个文本不匹配,则无需获取组。
-
它没有用 + 它提供 3 场比赛和一组,而我需要的是获得 1 场比赛并捕获这三个组(由您的提议中未考虑的“或”分隔).谢谢你
-
您可能不知道您不能单独获得重复的组。请阅读它。
-
看这个演示:regex101.com/r/lNXTnc/1我有这些捕获组没有
or