拆分逗号分隔的字符串并提取特定值

时间:2013-02-07 21:35:48

标签: java regex string parsing

我有一个查询,它连接两列的值并返回一个字符串,如下所示:

423545(50),AXX-10, ABB-1234X(30), 7568787(50),53654656,2021947(50),ABCD-2343423,FDKHD-324342(20),

我想拆分该字符串并将其放入一个数组中,丢弃括号中的所有值。输出如下所示:

[423545,AXX-10, ABB-1234X, 7568787,53654656,2021947,ABCD-2343423,FDKHD-324342]
  • 字符串末尾的逗号是可选的
  • 并非所有列都包含括号内的值

我知道我可以使用String.split()但是字符串末尾的可选括号值和逗号会使它复杂化。

提前致谢。

3 个答案:

答案 0 :(得分:1)

您可以分为两种模式: -

  • \\(\\d+\\),[ ]*上的一个,用于处理括号中的术语
  • 其次是,[ ]*,它适用于正常的,分隔值。

您只需要使用pipe(|)合并这些正则表达式,然后立即执行拆分。

因此,您的拆分标准变为: -

str.split("(?:\\(\\d+\\),[ ]*)|(?:,[ ]*)");

可以进一步简化为: -

str.split("(?:\\(\\d+\\))?,[ ]*");

我们只是选择了一个部分,然后把共同部分放在外面。

答案 1 :(得分:1)

这样的东西
([a-zA-Z\-\d]+)[()\d]*,*

?我测试了它here,它似乎有效:如果第0个是整个匹配,你可以在第1组的结果字符串中插入令牌。

答案 2 :(得分:1)

您可以过滤掉parens中的值,然后拆分。

    String str = "423545(50),AXX-10, ABB-1234X(30), 7568787(50),53654656,2021947(50),ABCD-2343423,FDKHD-324342(20)";

    String str2 = str.replaceAll("\\(\\d+\\)", "");
    for (String string : str2.split(",")) {
        System.out.println(string);
    }