模式不提供预期的输出

时间:2014-12-22 10:08:09

标签: java regex

我有以下代码:

Pattern pattern = Pattern.compile("\\d*\\s*[-\\+\\*/\\$£]");

String input = "3 3 * 4 + 2 /";
Matcher matcher = pattern.matcher(input);
List<String> output = new ArrayList<>();
while (matcher.find()) {
    output.add(matcher.group());
}


for(String s : output){
    System.out.println(s);
}

我非常希望列表中的输出如下:

3 3 *
4 +
2 /

我的实际输出是:

3 *
4 +
2 /

我确信有一个正则表达式向导可以告诉我这个问题:)

1 个答案:

答案 0 :(得分:0)

因为两个数字之间存在空格,所以您需要添加一个模式以匹配第二个数字并使其成为可选项。此外,我建议您使用\d+代替\d*,因为\d*也匹配空字符串。

Pattern pattern = Pattern.compile("\\d+(\\s\\d+)?\\s*[-+*/$£]");

String input = "3 3 * 4 + 2 /";
Matcher matcher = pattern.matcher(input);
ArrayList<String> output = new ArrayList<String>();
while (matcher.find()) {
    output.add(matcher.group());
}


for(String s : output){
    System.out.println(s);
}

输出:

3 3 *
4 +
2 /