拆分由管道分隔的连接字段

时间:2014-02-18 19:39:34

标签: regex groovy split

我有一个字段,其值是由|(管道)分隔的连接字段集,

注意: - 转义字符也是管道

鉴于


AB|||1|BC||DE

必需:
["AB|","1","BC|DE"]

如何将给定的字符串拆分成数组或列表而不逐个字符地迭代(即使用正则表达式或任何其他方法)以获得所需的内容?

2 个答案:

答案 0 :(得分:1)

如果有未使用的字符,您可以替换双管道,您可以这样做:

groovy:000> s = "AB|||1|BC||DE"
===> AB|||1|BC||DE
groovy:000> Arrays.asList(s.replaceAll('\\|\\|', '@').split('\\|'))*.replaceAll(
'@', '|')
===> [AB|, 1, BC|DE]

使用魔术字符序列清理并使用tokenize,它看起来像:

pipeChars = 'ZZ' // or whatever
s.replaceAll('\\|\\|', pipeChars).tokenize('\\|')*.replaceAll(pipeChars, '|')

当然,这假设在将字符串分组成对的字符串中从左到右是有效的,因此每对在输出中成为单个管道,而剩余的管道成为分隔符。当你开始使用像

这样的东西时
['AB|', '|1', 'BC|DE']

编码为

AB|||||1|BC||DE

然后整个编码方案崩溃了,完全不清楚如何对管道对进行分组以恢复原始值。 'X ||||| Y'可以由['X |','| Y']或['X ||','Y']或['X','|| Y']生成,没有办法知道它是什么。

答案 1 :(得分:0)

如何使用split('|')方法 - 但是根据你提供的方法,看起来你也可以拥有'|'字段值中的字符。您是否有机会将分隔符更改为不在结果值中的内容?