我要分割以下字符串:
给出字符串:
[PSR__123456_A,[AgrID=123456,PoolID=A],,Auto,Bank,0,0],[PSR__123456_A,[AgrID=123456,PoolID=A],,Auto,Bank,0,0],[PSR_Net__123456_A,[AgrID=123456,PoolID=A],,Suppress_Collateral,Bank,0,0]
预期结果:(3个元素)
[PSR__123456_A,[AgrID=123456,PoolID=A],,Auto,Bank,0,0]
[PSR__123456_A,[AgrID=123456,PoolID=A],,Auto,Bank,0,0]
[PSR_Net__123456_A,[AgrID=123456,PoolID=A],,Suppress_Collateral,Bank,0,0]
我尝试了以下正则表达式来解析/分割上面的字符串:
",(?![^[]*[]])" or ",(?=(((?!]).)*\[)|[^\[\]]*$)"
但是我仍然无法达到预期的结果,而是给了我以下结果(6个元素):
[PSR__123456_A
[AgrID=123456,PoolID=A],,Auto,Bank,0,0]
[PSR__123456_A
[AgrID=123456,PoolID=A],,Auto,Bank,0,0]
[PSR_Net__123456_A
[AgrID=123456,PoolID=A],,Suppress_Collateral,Bank,0,0]
是否有一种方法可以在Java(RegEx)中做到这一点而又不将字符串字符逐字符分割?
答案 0 :(得分:3)
如果您要选择逗号的时间和右边应该是方括号的2倍和方括号的2倍,则可以使用:
,(?=\[[^[]*\[[^[]*\][^]]*\])
在Java中:
String regex = ",(?=\\[[^\\[]*\\[[^\\[]*\\][^]]*\\])";
请参见Regex demo | Java demo
这将匹配:
,
匹配逗号(?=
积极前瞻
\[[^[]*\[[^[]*\][^]]+\]
符合条件:\[
匹配[
[^[]*
否定的字符类别不匹配[
\[
匹配[
[^[]*
否定的字符类别不匹配[
\]
匹配]
[^]]*
否定的字符类别不匹配]
\]
匹配]
)
积极回望答案 1 :(得分:2)
假设您的第一个元素以[PSR
开头,则可以使用正向查找的正则表达式,如下所示:
,(?=\[PSR)
使用\n
作为替换字符串
更新:如他的评论中所述 Manish 一样,您实际上可以使用],[
和]\n[
作为替换字符串