0

我有一个这样的字符串:

[1359873374000,281197568],[1360044062000,1206052864],[1360068648000,991623168]

如何像[1359873374000,281197568]使用正则表达式一样提取每个项目?

我已经编写了这段代码,但它不起作用:

String[] parts = mainstr.split("\\[[0-9],[0-9]\\]");
4

5 回答 5

2

你的正则表达式匹配[1,2]。您必须添加一个乘数:

"\\[[0-9]+,[0-9]+\\]"

编辑:我认为split()不会做你想做的事。看看Matcher 类

Matcher 类的解决方案:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

String sourceString = "[1359873374000,281197568],[1360044062000,1206052864],[1360068648000,991623168]";

Pattern pattern = Pattern.compile("\\[[0-9]+,[0-9]+\\]");
Matcher matcher = pattern.matcher(sourceString);

while (matcher.find()) {
  System.out.print("Start index: " + matcher.start());
  System.out.print(" End index: " + matcher.end() + " ");
  System.out.println(matcher.group());
}

这将为您提供每次出现的数字对。如果您想单独使用这些数字,您可以像这样捕获它们:"\\[([0-9]+),([0-9]+)\\]". 不过,您将不得不扩展该示例。

于 2013-02-07T10:57:02.817 回答
1

你应该它分开

(?<=\\]),(?=\\[)
于 2013-02-07T10:59:47.833 回答
1

[0-9]完全匹配一位数字。如果要匹配数字序列,请使用[0-9]*. 如果要匹配非空数字序列,请使用[0-9]+. 在您的情况下,您可能需要执行"\\[[0-9]+,[0-9]+\\]", or,这是相同的,"\\[\\d+,\\d+\\]"因为\d在 Java 正则表达式中表示“数字”。

于 2013-02-07T11:03:13.880 回答
0

这并不完美,因为它丢失了一些括号,但至少数字是完整的并且正确分组:

String[] parts = mainstr.split("\\D,\\D");
于 2013-02-07T11:03:41.390 回答
-1

您可能想要拆分 '],[',而不是您正在搜索的整个模式。尝试这个:

String[] parts = mainstr.split("\\\\],\\\\["); // Never sure when to use double or quadruple slashes.

之后,您可能需要更换支架。

于 2013-02-07T11:00:27.653 回答