gpt4 book ai didi

未知方程的 Java 正则表达式

转载 作者:行者123 更新时间:2023-12-01 11:45:22 25 4
gpt4 key购买 nike

我正在尝试使用单行,无空间方程作为输入,但对正则表达式很陌生。我知道我的代码中的正则表达式是完全错误的,但这是解释我正在尝试做的事情的最佳方式。一些示例是 12+2=14、-4+54=50、5*8=40、8--2=10、2-4=-6 等。如果有人能告诉我,我也将非常感激如何在正则表达式中使用 OR,因为我找不到任何信息。

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);
String input = sc.next();

String re1="((-)(\\d+))|(\\d+)"; // -int1 or int1
String re2="((\\+) | - | (\\*))"; //+ or - or *
String re3="((-)(\\d+))|(\\d+)"; // -int2 or int2
String re4="(=)"; // Equals
String re5="((-)(\\d+))|(\\d+)"; // -int3 or int3

Pattern pattern = Pattern.compile(re1+re2+re3+re4+re5,Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
Matcher matcher = pattern.matcher(input);

if (matcher.find()) {

String int1 = matcher.group(2);
String op1 = matcher.group(3);
String int2 = matcher.group(4);
String op2 = matcher.group(5);
String int3 = matcher.group(6);
System.out.println(int1 + " " + op2 + " " + int2 + " " + op2 + " " + int3);
}
}

最佳答案

首先,我建议使用像 http://www.regexr.com/ 这样的网站实时测试您的正则表达式。

然后,您可以使用可选的量词来代替“OR”,例如([-]?\d+) 匹配任何负数和正数:[-] 是一个包含减号的集合,下面的 ? 表示该集合可以出现零次或一次(这就是为什么它被称为可选量词),那么 >\d+ 表示一个数字出现一次或多次。

要指定运算符,您可以使用集合[+\-*\/]。请注意,在这种情况下,- 必须由 \ 转义,因为通常当在 [a-n] 等集合中找到时,它代表介于an。但在我们的例子中,它只是集合的一部分。

因此,采用这两部分,您最终会得到如下正则表达式: ([-]?\d+)([+\-*/])([-]?\d+)=( [-]?\d+)

请注意,您必须对 Java 字符串内的 \ 进行转义(我在这里没有这样做,因为它主要与正则表达式有关)。

关于未知方程的 Java 正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29184192/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com