在 Java 字符串的模式对象中设置正则表达式



我试图获取java字符串中的所有匹配项。匹配必须是数学方程式中的基数和幂。如您所知,基数和幂也可能是负数和小数。我已经设置了模式、正则表达式和匹配器。它看起来像这样,但它并没有给我我所期望的。我通过 StackOverflow 正则表达式上的这篇文章指导自己从单个组中的 java 字符串中查找整数或十进制?

我真的只对捕获具有负指数整数和非整数的幂感兴趣。

好吧,这是我的代码:

String ss = "2.5(4x+3)-2.548^-3.654=-14^-2.545";
String regex = "(\d^+(?:\d+)?)";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(ss);
while(m.find()){
        System.out.println("Wiwi the cat: "+m.group(1));
    }

此代码的输出什么都没有。任何想法或建议都会很棒。

谢谢

你的基本问题是这个角色:^ .它的意思是"输入的开始",所以你的正则表达式无法匹配任何东西。

你必须^它,这样它才能变成文字。

我还修复了您的正则表达式的其余部分:

String regex = "-?\d+(\.\d*)?(\^-?\d+(\.\d*)?)?";

观看现场演示。

并使用

match.group(); // the whole match

编辑:将[0123456789]替换为(\d)

编辑编辑:为 OP 添加了上下文

下面是一个应该符合您需求的模式:

-?(\d)+(\.(\d)+)?\^-?(\d)+(\.(\d)+)?

解释

-? - 零号或一个减号

(\d)+ - 一个或多个数字

(\.(\d)+)? -(可选)小数点,后跟一个或多个数字

\^ - 一个插入符号


在生成String.replace(pattern, "[FOUND]")输入时使用它:

"2.5(4x+3)[FOUND]=[FOUND]"

在您的答案上下文中,只需将您的regex替换为我发布的,并使用m.group()而不是m.group(1)

String ss = "2.5(4x+3)-2.548^-3.654=-14^-2.545";
String regex = "-?(\d)+(\.(\d)+)?\^-?(\d)+(\.(\d)+)?";
Pattern p = Pattern.compile(regex);
Matcher m = p.matcher(ss);
while(m.find()) {
    System.out.println("Wiwi the cat: " + m.group());
}

祝你好运!

相关内容

  • 没有找到相关文章