我有这个字符串:
String values="[52,52,73,52],[23,32],[40]";
如何只获得40号?
我正在尝试"\\[^[0-9]*$\\]"
这种模式,我没有运气。
有人可以给我提供适当的模式吗?
答案 0 :(得分:3)
无需使用^
此处正确的正则表达式为\\[([0-9]+)\\]$
如果您确定[]
中有一个数字,则可以使用此简单的正则表达式
\\[(\d+)\\]
答案 1 :(得分:1)
您可以更新您的模式以在字符类之后使用捕获组和量词+
,并省略^
锚以断言字符串的开头。
更改锚点以将字符串$
的结尾声明为模式的结尾:
\\[([0-9]+)\\]$
^ ^^
例如:
String regex = "\\[([0-9]+)\\]$";
String string = "[52,52,73,52],[23,32],[40]";
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(string);
if(matcher.find()) {
System.out.println(matcher.group(1)); // 40
}
答案 2 :(得分:1)
鉴于您似乎正在使用Java,建议您在此处使用String#split
:
String values = "[52,52,73,52],[23,32],[40]";
String[] parts = values.split("(?<=\\]),(?=\\[)");
String[][] contents = new String[parts.length][];
for (int i=0; i < parts.length; ++i) {
contents[i] = parts[i].replaceAll("[\\[\\]]", "").split(",");
}
// now access any element at any position, e.g.
String forty = contents[2][0];
System.out.println(forty);
以上代码段生成的是一个 jagged 2D Java String数组,其中第一个索引对应于初始CSV中的数组,第二个索引对应于该数组中的元素。
答案 3 :(得分:0)
如果您需要最后一个String.substring
和最后一个[
之间的内容,为什么不只使用]
:
String values = "[52,52,73,52],[23,32],[40]";
String wanted = values.substring(values.lastIndexOf('[')+1, values.lastIndexOf(']'));