我有一个以下字符串的示例(所有这些都在一个字符串中)。
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
答案 0 :(得分:1)
你也许可以使用这种模式:
\\(?\\d+(?:\\.\\d+)?[^=a-wyz]+=\\s*\\d+(?:\\.\\d+)?
\\(?
匹配潜在的左括号
\\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.]+)