我有以下代码:
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 /
我确信有一个正则表达式向导可以告诉我这个问题:)
答案 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 /