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

如何用split()处理多分隔符?单次提取目标时间遇报错求助

解决字符串提取与split()多分隔符问题

先给你解释下报错的根源:你第二次split用的" (GMT"里,(是正则表达式的特殊字符(用来定义捕获分组),没转义的话,正则解析器会认为你开了一个分组却没闭合,所以抛出了Unclosed group错误。要是想继续用原来的两步法,只需要把括号转义成" \\(GMT"(Java/Groovy里转义特殊字符要双反斜杠)就行,但既然你想一步搞定,咱们来看看更高效的方案:

一次split完成提取

你可以直接用正则表达式作为split的参数,把前后不需要的内容都设成分隔符,这样取数组中间的元素就是目标值:

def lastupdated = "Egypt Today Last Update Time: 18-Aug-2019 14:00 (GMT)"
def target = lastupdated.split("Last Update Time: | \\(GMT")[1]
println(target) // 输出:18-Aug-2019 14:00

这里的split参数用|分隔了两个正则规则:第一个是Last Update Time: ,第二个是转义后的 \(GMT(因为(是正则特殊字符,必须转义成\(,在字符串里要写\\()。split后得到的数组中,第二个元素就是我们要的日期时间。

不过更稳妥的方式其实是直接用正则匹配捕获目标内容,比split更直观,容错性也更强:

def matcher = (lastupdated =~ /Last Update Time: (\d{2}-\w{3}-\d{4} \d{2}:\d{2})/)
if (matcher.find()) {
    def target = matcher.group(1)
    println(target) // 输出:18-Aug-2019 14:00
}

这个正则直接锁定我们需要的日期时间格式并捕获,就算原字符串前后有小改动,也不容易提取失败。

split()处理多分隔符的正确姿势

split的参数本质是正则表达式,所以处理多分隔符很简单:

  • 用|把不同的分隔符分开,比如要按逗号和分号分割,就写split(",|;")
  • 如果分隔符包含正则特殊字符(比如(, ), ., *等),必须用\转义,在Java/Groovy字符串里要写成\\,比如要按(分割,就得写split("\\(")
  • 如果多个分隔符是同类字符,也可以用正则字符类简化,比如要按逗号、分号、句号分割,可写成split("[,;.]")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:05:28