0

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

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() 但字符串末尾的可选括号值和逗号使其复杂化。

提前致谢。

4

3 回答 3

1

您可以分成两种模式:-

  • One on \\(\\d+\\),[ ]*,它将处理括号中的术语
  • 其次,[ ]*,这将适用于正常的,分离值。

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

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

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

可以进一步简化为:-

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

我们只是做了一个可选的部分,把公共部分放在外面。

于 2013-02-07T21:40:35.883 回答
1

就像是

([a-zA-Z\-\d]+)[()\d]*,*

? 我在这里对其进行了测试,它似乎有效:如果第 0 个是整个匹配项,那么您将令牌插入到第 1 组的结果字符串中。

于 2013-02-07T21:52:42.130 回答
1

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

    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);
    }
于 2013-02-07T22:03:34.650 回答