如何获得两个字符之间的数字?

时间:2019-05-05 14:33:44

标签: regex

我有这个字符串:

String values="[52,52,73,52],[23,32],[40]";

如何只获得40号?

我正在尝试"\\[^[0-9]*$\\]"这种模式,我没有运气。

有人可以给我提供适当的模式吗?

4 个答案:

答案 0 :(得分:3)

无需使用^

此处正确的正则表达式为\\[([0-9]+)\\]$

如果您确定[]中有一个数字,则可以使用此简单的正则表达式

\\[(\d+)\\]

答案 1 :(得分:1)

您可以更新您的模式以在字符类之后使用捕获组和量词+,并省略^锚以断言字符串的开头。

更改锚点以将字符串$的结尾声明为模式的结尾:

\\[([0-9]+)\\]$
   ^     ^^   

Regex demo | Java demo

例如:

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(']'));