【问题标题】:Removing everything between nested parentheses删除嵌套括号之间的所有内容
【发布时间】:2022-10-24 00:04:44
【问题描述】:
为了删除括号之间的所有内容,目前我使用:
SELECT
REGEXP_REPLACE('(aaa) bbb (ccc (ddd) / eee)', "\\([^()]*\\)", "");
这是不正确的,因为它给出了bbb (ccc / eee),因为它只删除了内括号。
如何删除嵌套括号之间的everynting?所以这个例子的预期结果是bbb
【问题讨论】:
标签:
regex
google-bigquery
【解决方案2】:
如果您可以迭代正则表达式操作直到达到一个固定点,您可以这样做:
repeat {
old_string = string
string := remove_non_nested_parens_using_regex(string)
} until (string == old_string)
例如,如果我们有
((a(b)) (c))x)
在第一次迭代中,我们删除了(b) 和(c):以( 开头、以) 结尾且不包含括号的序列,与([^()]*) 匹配。我们最终得到:
((a) )x)
然后在下一次迭代中,(a) 消失了:
( )x)
又经过一次迭代,( ) 消失了:
x)
当我们尝试删除更多括号时,没有更多变化,因此算法以x) 终止。