我有一个这样的字符串:
[1359873374000,281197568],[1360044062000,1206052864],[1360068648000,991623168]
如何使用正则表达式提取[1359873374000,281197568]
之类的每个项目?
我已编写此代码,但它不起作用:
String[] parts = mainstr.split("\\[[0-9],[0-9]\\]");
答案 0 :(得分:2)
您的正则表达式匹配[1,2]
。你必须添加一个乘数:
"\\[[0-9]+,[0-9]+\\]"
编辑:
我认为split()
不会做你想做的事。看看Matcher Class。
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]+)\\]"
。你必须扩展这个例子。
答案 1 :(得分:2)
你应该
分开(?<=\\]),(?=\\[)
答案 2 :(得分:1)
[0-9]
只匹配一位数。如果要匹配数字序列,请使用[0-9]*
。如果要匹配非空数字序列,请使用[0-9]+
。在您的情况下,您可能需要"\\[[0-9]+,[0-9]+\\]"
,或者"\\[\\d+,\\d+\\]"
,\d
,因为{{1}}在Java正则表达式中表示“数字”。
答案 3 :(得分:0)
这不完美,因为它丢失了一些括号,但至少数字是完整的并且正确分组:
String[] parts = mainstr.split("\\D,\\D");
答案 4 :(得分:-1)
你可能想分开'],[',而不是你正在搜索的整个模式。试试这个:
String[] parts = mainstr.split("\\\\],\\\\["); // Never sure when to use double or quadruple slashes.
之后,您可能需要更换括号。