java - 正则表达式在运算符之后拆分数学表达式并查找负数

标签 java regex

有没有办法根据运算符和负数拆分表达式?

如果我有一个字符串 "2+-2",我希望 -2 成为我数组中的对象吗?

    String exp = "2+-2";
    String[] temp = new String[exp.length()];
    temp =exp.split("(?<=[-+*/^])|(?=[-+*/^])");
    Stack<String> stack = new Stack<String>();
    LinkedList <String>list= new LinkedList<String>();
    for (int i=0; i<temp.length; i++) {
        String s = temp[i]+"";
        if(s.equals("-")) {
           while(!stack.isEmpty())
           {
              String tkn=stack.pop();
              if(tkn.equals("*")|| tkn.equals("/") || tkn.equals("+")||tkn.equals("-")||tkn.equals("^"))
                  list.add(tkn);
              else{
                  stack.push(tkn);
                  break;
              }
           }
           stack.push(s);
. . . for every operator . . .

最佳答案

描述

这个正则表达式将:

  • 找出数学方程式中的所有数字
  • 捕获所有数字并将它们作为数组返回
  • 捕获数字中包含的正号或负号

正则表达式

(?:(?<=[-+/*^]|^)[-+])?\d+(?:[.]\d+)?

Regular expression visualization

例子

示例 Java 代码

import java.util.regex.Pattern;
import java.util.regex.Matcher;
class Module1{
  public static void main(String[] asd){
  String sourcestring = "source string to match with pattern";
  Pattern re = Pattern.compile("(?:(?<=[-+/*^])[-+]?)\\d+(?:[.]\\d+)?",Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
  Matcher m = re.matcher(sourcestring);
  int mIdx = 0;
    while (m.find()){
      for( int groupIdx = 0; groupIdx < m.groupCount()+1; groupIdx++ ){
        System.out.println( "[" + mIdx + "][" + groupIdx + "] = " + m.group(groupIdx));
      }
      mIdx++;
    }
  }
}

示例文本

1+1
2.1+-2.2
3.1+3.2
4.1--4.2
5.1-+5.2
-6.1--6.2
7.1-7.2

捕获组

[0] => 1
[1] => 1
[2] => 2.1
[3] => -2.2
[4] => 3.1
[5] => 3.2
[6] => 4.1
[7] => -4.2
[8] => 5.1
[9] => +5.2
[10] => 6.1
[11] => -6.2
[12] => 7.1
[13] => 7.2

在线 Java validator

http://fiddle.re/b2w5wa

额外

在您最初的问题中,您避免只对第二个值感兴趣。如果是这种情况,那么这就是适合您的正则表达式

(?:(?<=[-+/*^])[-+]?)\d+(?:[.]\d+)?

捕获组

[0] => 1
[1] => -2.2
[2] => 3.2
[3] => -4.2
[4] => +5.2
[5] => 6.1
[6] => -6.2
[7] => 7.2

关于java - 正则表达式在运算符之后拆分数学表达式并查找负数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36829053/

相关文章:

java - Android调试器和JSOUP : Source not found

java - 正则表达式忽略两个字符串之间的字符?

python - Python 中的正则表达式问题

java - 使用 <include> android 时出现 NullPointerException

java - EXT GWT 将所选项目绑定(bind)到新的空网格

java - 如何为区域设置名称创建本地化字符串?

java - Android - 等待 Volley 响应返回

java - 从匹配器获取字符串的特定部分

javascript - Angular 6 Validators.pattern() 正则表达式不起作用

html - 从 Swift 中的 html 字符串中删除空的 <p></p> 标签