【发布时间】:2022-01-24 17:16:43
【问题描述】:
我知道关于如何根据括号拆分字符串的问题存在很多答案,但它们从不递归地这样做。
查看字符串1 2 3 (test 0, test 0) (test (0 test) 0):
正则表达式 \s(?![^\(]*\)) 返回 "1", "2", "3", "(test 0, test 0)", "(test", "(0 test) 0)"
我正在寻找的正则表达式将返回 "1", "2", "3", "(test 0, test 0)", "(test (0 test)0)"
或"1", "2", "3", "test 0, test 0", "test (0 test)0"
这将让我再次递归地在结果中使用它,直到没有括号。
理想情况下,它也会尊重转义的括号,但我本人在正则表达式方面并不是那么先进,只知道基础知识。
有没有人知道如何处理这个问题?
【问题讨论】:
-
是什么让您认为
regex是解决此问题的正确工具? -
当字符串的组成部分具有语义价值时,例如平衡括号,最好进行标记和解析。正则表达式可以是您的词法分析器/标记器的一个组件,但并不是完成整个工作的最佳选择。
-
当我们知道上下文/背景时,选择一个可持续的解决方案通常会有所帮助:这些由数字和括号组成的字符串表达式来自哪里?它们代表什么?