我有一个这样的字符串:
[1359873374000,281197568],[1360044062000,1206052864],[1360068648000,991623168]
如何像[1359873374000,281197568]
使用正则表达式一样提取每个项目?
我已经编写了这段代码,但它不起作用:
String[] parts = mainstr.split("\\[[0-9],[0-9]\\]");
你的正则表达式匹配[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]+)\\]"
. 不过,您将不得不扩展该示例。
你应该把它分开
(?<=\\]),(?=\\[)
[0-9]
完全匹配一位数字。如果要匹配数字序列,请使用[0-9]*
. 如果要匹配非空数字序列,请使用[0-9]+
. 在您的情况下,您可能需要执行"\\[[0-9]+,[0-9]+\\]"
, or,这是相同的,"\\[\\d+,\\d+\\]"
因为\d
在 Java 正则表达式中表示“数字”。
这并不完美,因为它丢失了一些括号,但至少数字是完整的并且正确分组:
String[] parts = mainstr.split("\\D,\\D");
您可能想要拆分 '],[',而不是您正在搜索的整个模式。尝试这个:
String[] parts = mainstr.split("\\\\],\\\\["); // Never sure when to use double or quadruple slashes.
之后,您可能需要更换支架。