如何使用具有更改分隔符的先行断言来拆分字符串

时间:2014-11-26 19:23:56

标签: java regex split lookahead

鉴于我的英语最近变得非常生疏,我会简短地说。 我想要做的是将字符串拆分为一组子字符串,使分隔符保持为相应子字符串的一部分。当然,如果事实并非如此,那么分隔符可能会有所不同。说我有一个类似于:

的字符串
  

[ffd] [ulg] [zff] = 1 = ... = 2 = ... [bdt] = 3 = ... [abc] [dfg] [urc] [ttr] = 4 = ..

我希望将其拆分为以下子串:

  

[ffd] [ulg] [zff] = 1 = ...

     

= 2 = ...

     

[bdt] = 3 = ...

     

[abc] [dfg] [urc] [ttr] = 4 = ...

注意,“= number =”序列必须始终存在(并且是基本分隔符),但它可能(或可能不)前面有不同数量的\ [\ w {3} \]组

到目前为止,我玩过类似的表达方式:

  

?=((\ [\ w {3} \])+ \ s = \ d \ {3} =)

  

?=((\ [\ w {3} \])* \ s = \ d \ {3} =)

第一个返回:[ffd],[uld],[zff] = 1 = ...,[bdt] = 3 =,[abc],[dfg],[urc],[ttr] = 4 =。 ..作为单独的字符串。不出所料,它将[\ w {3}]集群视为一个并将“= 2 = ...”解释为“[zff] = 1 = ...”子字符串的一部分存在问题。另一个简单地将每个[\ w {3}]和每个“= number = ...”序列解释为单独的字符串。另外,我试图将OR子句作为split方法的参数嵌入,即:

  

(?=((\ [\ w {3} \])+ \ s = \ d \ {3} = | = \ d \ {3} =))

但效果与第二种情况相同。

1 个答案:

答案 0 :(得分:0)

您是否尝试使用lookbehind断言进行拆分?:

(?<== [0-9]{1,1000} =)

或使用find with:

\\[.*?(?:= [0-9]+ =|$)