正则表达式,用于匹配大小不同的向量中的最后一个数字

时间:2019-05-05 21:09:54

标签: java regex regex-lookarounds regex-group regex-greedy

我有这个字符串:

values="[72, 216, 930],[250],[72],[228, 1539],[12]";

我试图组合两种模式以获取第一种[]类型的最后一个数字和第二种[]类型的数字。

pattern="\\, ([0-9]+)\\]|\\[([0-9]+)\\]"

但它输出null:

930, null, null, 1539, null

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:3)

在这里,我们可能不想从左侧绑定它,而只是从右侧使用],然后我们向左滑动并收集我们的数字,也许类似于this expression

([0-9]+)\]

enter image description here

此图显示了它如何工作:

enter image description here

如果您愿意,我们也可以从左侧将其装订,类似于this expression

([\[\s,])([0-9]+)(\])

enter image description here

此图显示了第二个图的工作方式:

enter image description here

答案 1 :(得分:2)

尝试一下。

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

final String regex = ", ([0-9]+)]";
final String string = "[72, 216, 930],[250],[72],[228, 1539],[12]";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}

输出:

Full match: , 930]
Group 1: 930
Full match: , 1539]
Group 1: 1539

答案 2 :(得分:2)

要确保数据实际上位于方括号之间,可以使用捕获组,以[开始比赛,以]结束比赛

\[(?:\d+,\h+)*(\d+)]

在Java

\\[(?:\\d+,\\h+)*(\\d+)]
  • \[匹配[
  • (?:\d+,\h+)*重复0+次,匹配1+个数字,逗号和1+个水平空格字符
  • (\d+)在第1组中捕获匹配的1+数字
  • ]比赛结束方括号

Regex demo | Java demo

例如:

String regex = "\\[(?:\\d+,\\h+)*(\\d+)]";
String string = "[72, 216, 930],[250],[72],[228, 1539],[12]";
Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println(matcher.group(1));
}

结果:

930
250
72
1539
12

答案 3 :(得分:1)

package Sample;

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

public class StackOverFlow{


    final static String regex = "\\d*]";
    final static String string = "[72, 216, 930],[250],[72],[228, 1539],[12]";

    final static Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
    final static Matcher matcher = pattern.matcher(string);



    public static void main(String[] args) {
        while (matcher.find()) {
            String val = matcher.group(0).replace("]", "");
            System.out.println(val);
        }
    }
}

输出

930
250
72
1539
12