如何用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
相关产品推荐
相关产品推荐

