我创建了一个regular expression:
((\(\s*) #match start parens
|(\d+\.?\d*) #match a number
|([+-/%^!]) #match operators
|([*]) #match the asterisk operator
|(\s*\)))+ #match the end parens
应该分括括号,数字(整数和小数(3
和6.28
))和运算符(+-/*^%!
)。我尝试了一些测试
( (2 3 +) 6.28 +)
(3.14 6.28 +)
( (3 4 +) (5 6 +) *)
我注意到了一些事情。当我在带有两个起始parens的表达式上运行正则表达式时,它似乎忽略了一个括号,并且在站点上进行测试似乎产生了许多null和重复字符的实例。有没有办法匹配有效的表达式并将其分配给它自己的组?例如,如果我有表达式( (2 3 +) 6.28 +)
,则生成的组将是:[(
,(
,2
,3
,+
,6.28
,+
,)
]?
答案 0 :(得分:1)
试试这个:
public static void main(String[] args) {
String test ="((6.28 + 3.14) + 7.56)";
String re = "\\(|\\)|\\d+\\.?\\d*|[+-/%^!*]";
List<String> components = new ArrayList<String>();
Pattern p = Pattern.compile(re);
Matcher m = p.matcher(test);
while(m.find()) {
components.add(m.group());
}
System.out.println(components);
}
[(, (, 6.28, +, 3.14, ), +, 7.56, )]