Regex 替换匹配组中字符的多个实例

Regex 替换匹配组中字符的多个实例,regex,hive,Regex,Hive,我正在尝试编写一个regexp_replace,用分号(;)替换方括号内的逗号(,)分隔符 输入字符串: gc:network,sm:Out-stock,fm:[PUT,今天免费取店,S2H],pb:[Rollback,Test] 预期输出: gc:network,sm:Out-stock,fm:[PUT;今天免费提货;S2H],pb:[Rollback;Test] 任何帮助都将不胜感激 如果您的正则表达式支持向前看和向后看,您可以尝试: (?<=\[[^\]]*),(?=[^\[]*

我正在尝试编写一个regexp_replace,用分号(;)替换方括号内的逗号(,)分隔符

输入字符串:

gc:network,sm:Out-stock,fm:[PUT,今天免费取店,S2H],pb:[Rollback,Test]
预期输出:

gc:network,sm:Out-stock,fm:[PUT;今天免费提货;S2H],pb:[Rollback;Test]

任何帮助都将不胜感激

如果您的正则表达式支持向前看和向后看,您可以尝试:

(?<=\[[^\]]*),(?=[^\[]*\])

(?CSV字符串中可以出现多少个括号内的术语?到目前为止,我在数据中看到的是一到五个使用
“(\\G(?!^)\\\[)([^,\\]\[]*),”
,并替换为
“$1$2;”
@WiktorStribiżew输出有一些问题,它删除了第二个分隔符,并在开始处添加了一个额外的分隔符。以下是输出:
gc:network,sm:Out-stock,fm:[;PUT;今天免费存储拾取2h],pb:[回滚;测试]
它不能,请看。您一定丢失了部分正则表达式或替换。它说Hive的
regexp\u replace
使用Java正则表达式语法,而且AFAIK,Java正则表达式引擎不支持无限宽Lookbehinds。好的。谢谢!我想您可以将输入长度设置为一个限制。例如
(?@ArunC很棒,它适合您!)请考虑接受这个答案,因为这是这个平台工作的一部分。“Mjja我在测试解决方案后不久就做了。因为我有不到15个信誉点,这个平台没有显示我的+ 1。”我不知道。我想你至少应该能够接受这个答案。但这一切都很好。我只是想提一下。
(?<=\[[^\]]{0,1000}),(?=[^\[]*\])