获得字符串模式

时间:2014-01-01 10:32:35

标签: java regex

我有一个以下字符串的示例(所有这些都在一个字符串中)。

6 x 9 + 4 = 58.0 

</br> 58.0  markers cost $33.

</br> 33/ 58.0  = 0.5689655172413793 

<br>Each marker cost $0.5689655172413793 .

<br> 0.5689655172413793  x 9 = 5.120689655172414 

<br>Each eraser cost $5.120689655172414 

<br> (5.120689655172414  x 3) +  (0.5689655172413793  x 10) = 21.051724137931036 

<br>The total cost is $21.051724137931036 .

我想删除所有其他内容,只获取数学表达式..

6 x 9 + 4 = 58.0
33/ 58.0  = 0.5689655172413793 
0.5689655172413793  x 9 = 5.120689655172414 
(5.120689655172414  x 3) +  (0.5689655172413793  x 10) = 21.051724137931036 

我已经尝试了正则表达式模式来删除所有其他的东西,但它会被一个字符串一个字符分割掉。

 Matcher matcher = Pattern.compile("(\\d+|[\\+\\-*/=()])").matcher(qalist.get(i).getFullsol());

         while(matcher.find())
         {
             System.out.println(matcher.group(0));
         }

任何人都可以提供帮助? :)

遇到问题

 Matcher matcher = Pattern.compile("\\(?(\\d+(?:\\.\\d+)?[^=:a-wyz]+)=\\s*(\\d+(?:\\.\\d+)?)").matcher("The expression is (9 * 1) -1 = 8 ");

我会得到:

表达式:9 * 1)-1

答案:8

不知道什么是错的..

Whole expression: (5.120689655172414  x 3) +  (0.5689655172413793  x 10) = 21.051724137931036
Expression: 5.120689655172414  x 3) +  (0.5689655172413793  x 10)
Answer: 21.051724137931036

3 个答案:

答案 0 :(得分:1)

你也许可以使用这种模式:

\\(?\\d+(?:\\.\\d+)?[^=a-wyz]+=\\s*\\d+(?:\\.\\d+)?

regex101 demo

\\(?匹配潜在的左括号

\\d+(?:\\.\\d+)?匹配数字,整数或浮动。

[^=a-wyz]+=几乎可以匹配除等号和字母之外的任何内容(x将匹配),除了字母,直到达到等号。

\\s*\\d+(?:\\.\\d+)?用于匹配表达式的结果,包括潜在的空格和数字(整数或浮点数)。

答案 1 :(得分:0)

试试这个

    StringBuilder sb = new StringBuilder();
    for (String l : str.split("</?br>")) {
        l = l.trim();
        if (!l.isEmpty() && !l.matches(".*[a-zA-Z&&[^x]].*")) {
            sb.append(l).append("\n");
        }
    }

答案 2 :(得分:0)

怎么样:

([()\s\d.x*+/-]+\s*=\s*[\d.]+)