Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 拆分逗号分隔的字符串,不包括括号中的字符串_Java_Regex_String_Split - Fatal编程技术网

Java 拆分逗号分隔的字符串,不包括括号中的字符串

Java 拆分逗号分隔的字符串,不包括括号中的字符串,java,regex,string,split,Java,Regex,String,Split,我有以下要拆分的字符串: 给定字符串: [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]
预期结果:(3个要素)

我尝试了以下正则表达式来解析/拆分上述字符串:

",(?![^[]*[]])" or ",(?=(((?!]).)*\[)|[^\[\]]*$)"
但我仍然无法实现预期的结果,而是它给了我以下结果(6个要素):


在Java(正则表达式)中有没有一种方法可以做到这一点而不必逐个字符分割字符串?

假设您的第一个元素以
[PSR
开头,那么您可以使用具有正向前瞻性的正则表达式,如下所示:

,(?=\[PSR)

使用
\n
作为替换字符串

更新:正如他在评论中所描述的,您实际上可以使用
],[
]\n[
作为替换字符串


假设您的第一个元素以
[PSR
开头,那么您可以使用具有正向前瞻性的正则表达式,如下所示:

,(?=\[PSR)

使用
\n
作为替换字符串

更新:正如他在评论中所描述的,您实际上可以使用
],[
]\n[
作为替换字符串


如果要选择逗号的时间和右边的内容应为开括号的2倍和闭括号的2倍,可以使用:

,(?=\[[^[]*\[[^[]*\][^]]*\])
在Java中:

String regex = ",(?=\\[[^\\[]*\\[[^\\[]*\\][^]]*\\])";
见|

这将符合:

  • 匹配逗号
  • (?=
    正向前瞻
    • \[^[]*\[^[]*\][^]]+\]
      匹配:
    • \[
      匹配
      [
    • [^[]*
      求反字符类不匹配
      [
    • \[
      匹配
      [
    • [^[]*
      求反字符类不匹配
      [
    • \]
      匹配
      ]
    • [^]]*
      否定字符类不匹配
      ]
    • \]
      匹配
      ]
  • 关闭正向前瞻

如果要选择逗号的时间和右边的内容应为开口的2倍和闭合方括号的2倍,可以使用:

,(?=\[[^[]*\[[^[]*\][^]]*\])
在Java中:

String regex = ",(?=\\[[^\\[]*\\[[^\\[]*\\][^]]*\\])";
见|

这将符合:

  • 匹配逗号
  • (?=
    正向前瞻
    • \[^[]*\[^[]*\][^]]+\]
      匹配:
    • \[
      匹配
      [
    • [^[]*
      求反字符类不匹配
      [
    • \[
      匹配
      [
    • [^[]*
      求反字符类不匹配
      [
    • \]
      匹配
      ]
    • [^]]*
      否定字符类不匹配
      ]
    • \]
      匹配
      ]
  • 关闭正向前瞻

如果第一个元素确实总是有相同的前缀。@FedericoPiazza谢谢,但是,除了方括号中的字符串模式外,所有的字符串元素都不同:-)@Jown你能描述第一个模式吗?它总是有
\uuuu>或任何类型的模式吗?不依赖于开始characters@Manish lol我没有看到。更新了答案,谢谢你的评论,如果第一个元素确实总是有相同的前缀。@FedericoPiazza谢谢,但是,所有的字符串元素都不同,除了方括号中的字符串模式:-)@Jown你能描述第一个模式吗?它总是有
\uu
或任何类型的前缀吗模式?,不依赖于启动characters@Manish哈哈,我没看到。更新了答案,谢谢你的评论