【发布时间】:2020-03-30 15:32:00
【问题描述】:
我有一个“主”字符串,例如:
((Gripper|Open==true OR RIT|Turning==false) AND Robot|PosX >=3 OR (Test|Close==false OR (Gripper|Open==false AND RIT|Turning==false)))
我想在最好的情况下得到三个子字符串:
1: (Gripper|Open==true OR RIT|Turning==false)
2: Robot|PosX >=3
3: (Test|Close==false OR (Gripper|Open==false AND RIT|Turning==false))
但是只有两个(大括号 [1,3] 中的那个)也可以,因为它们可以在主字符串中替换,从而得到第 3 个 [2]。 最好借助正则表达式。
所有子字符串作为孩子进入一个类,因此我可以为每个孩子应用正则表达式并获取他们的子字符串。
1: Test|Close==false
2: (Gripper|Open==false AND RIT|Turning==false)
对于第三个孩子(没有大括号的第一个结果将再次是可选的。
我尝试了类似于Regular expression to extract text between braces 的方法并将匹配的位置放入堆栈,但没有达到预期的结果。
到目前为止我发现的最好的正则表达式是
([^()]+(?:[^()]+)+) or
([^()]+(?:)+)
(说真的,正则表达式很强大,但我不知道上述语句的真正作用)这给了我
1. Gripper|Open == true OR RIT|Turning==false
2. AND Robot|PosX >=3 OR
3. Test|Close==false OR
4. Gripper|Open==false AND RIT|Turning==false
但是,3+4 应该只在一组中
Test|Close==false OR (Gripper|Open==false AND RIT|Turning==false)
有谁知道如何做到这一点?
【问题讨论】:
-
逻辑是什么?为什么 3 +4 应该只在一组?