我试图获取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());
}
祝你好运!