我正在尝试以一种相当具体的方式分割字符串。我一直在使用 .split()
和 .replaceall()
方法,但我无法正确使用。
以下是我需要拆分的字符串的几个示例,以及拆分后它们的样子。 ,
表示数组中的一个新字符串。
示例 1:“(and (or (can-hit-robot) (wall) ) (can-hit-robot) (wall) ) )”
"(and", "(or", "(can-hit-robot)", "(wall)", ")", "(can-hit-robot)", "(wall)", ")"
示例 2:“(seq (射击) (if (can-hit-robot) (shoot) (move) ) )”
"(seq", "(shoot)", "(if", "(can-hit-robot)", "(shoot)", "(move)", ")", ")"
示例 3:“(while(wall)(if (can-hit-robot)(shoot)(move)))”
"(while", "(wall)", "(if", "(can-hit-robot)", "(shoot)", "(move)", ")", ")"
任何帮助将不胜感激!
最佳答案
这个怎么样?
(?:\s*(?=\())|(?:(?<=\))\s*)
虽然它依赖于lookbehind,所以没有lookbehind的引擎可能无法处理这个表达式。 :(
所表达的规则是,在左括号之前和右括号之后进行拆分,同时切断括号外部的所有空格。因此,交替的左侧部分与通向左括号的空格相匹配;右侧部分将匹配右括号后继续的空格。
关于regex - 使用正则表达式分割复杂的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10562941/