You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Groovy中如何分割含%的字符串且不拆分引号内的逗号?

如何在Groovy中正确分割包含引号内逗号的字符串?

你的问题核心是要分割字符串中不在双引号内的逗号,普通的split(",")会把所有逗号都拆分,包括"%Hello,Ram%"里的逗号,这显然不符合需求。我们可以用正则表达式来精准匹配那些不在双引号中的逗号,以此作为分割依据。

解决方案:使用正则表达式匹配非引号内的逗号

Groovy支持基于正则表达式的字符串分割,我们可以利用正向预查断言,确保要分割的逗号不在一对未闭合的双引号内。具体思路是:匹配逗号时,检查当前位置之后的内容中双引号的数量为偶数(说明当前逗号不在引号包裹的范围内)。

下面是完整的实现代码:

def input = 'HAVING first_name like "%Hello,Ram%" AND last_name like "%XYZ%",order by id asc,name desc'
// 用正则分割不在双引号内的逗号
def parts = input.split(/(?=(?:[^"]*"[^"]*")*[^"]*$)/)

def test1 = parts[0].trim()
def test2 = parts[1].trim()

println "test1 = $test1"
println "test2 = $test2"

代码细节说明

  • 正则表达式(?=(?:[^"]*"[^"]*")*[^"]*$)是正向预查逻辑:它会验证当前位置之后的文本中,双引号是成对出现的,从而确保当前匹配的逗号不在引号内部。
  • 调用trim()是为了去除分割后字符串前后可能存在的空格,让结果更整洁。

运行结果

执行这段代码后,会得到你期望的输出:

test1 = HAVING first_name like "%Hello,Ram%" AND last_name like "%XYZ%"
test2 = order by id asc,name desc

另外提一句,你之前的代码里有个小疏漏:a.split(",")执行后没有赋值给变量,而且println a打印的还是原字符串,所以看不到分割结果,上面的代码已经修正了这个问题。

内容的提问来源于stack exchange,提问作者Sirshak Regmi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 09:32:55