正则表达式用于java分割空格,数字和运算符,但保留运算符和数字

时间:2013-04-30 11:36:07

标签: java regex split operators

到目前为止,我已经有了这个正则表达式,可以通过拆分和删除空格来将我的字符串拆分成字符串数组,并且还可以通过运算符进行拆分,但保留运算符并插入到相同的数组中。

tokens = rpn.split("(?<=\\s) |(?=\\s) |(?>\\s+) |(?<=[-+*/()])|(?=[-+*/()])|(?>=[-+*/()])");

E.g. input 2 3 + OR 2 3+;
     output a[0]=2;a[1]=3;a[2]=+

这是一个RPN计算器,用于删除所有空格和单独的数字和运算符。

以上正则表达式可用于拆分数字和运算符e.g. 3+ into 3 + but if I have 2 3 + 然后输出为tokens[0]=2; tokens[1]=3;tokens[2]="";tokens[3]=+;

请任何人帮助解决此正则表达式问题。

3 个答案:

答案 0 :(得分:0)

拆分....我用以下正则表达式尝试了它:

\s*(?=[^0-9.]+)\s*

在下一个字符不是数字(带小数)的任何点上拆分。您可能必须聪明地判断数字是否为负数(无论如何都需要更改数据格式)

编辑:我在perl中测试过它......

答案 1 :(得分:0)

如果我理解正确,你就可以像这样进行分裂。

public String[] split(String text) {
    ArrayList<String> a = new ArrayList<String>();
    Matcher matcher = Pattern.compile("(\\d+|[\\+\\-*/])").matcher(text);
    int idx = 0;
    while (matcher.find(idx)) {
        a.add(matcher.group());
        idx = matcher.end();
    }
    return a.toArray();
}

public void testSplit() {
    Assert.assertArrayEquals(new String[] {"3", "+", "5", "*", "3", "-", "4"},
            split("3 + 5 * 3-4"));
}

它比喧闹的正则表达更清晰,更容易理解。

答案 2 :(得分:0)

这对我有用:

tokens = rpn.replaceAll("(?=\\p{Punct})|(?<=\\p{Punct})", " ").split("\\s+");

这会在标点符号周围添加空格,然后在该空格上分割。您可以使用更具体的标点符号替换\\p{Punct},例如,如果您愿意,可以使用示例中的[-+*/()]