我试图在java字符串中获得所有匹配。比赛必须是数学方程式中的基础和力量。如你所知,基数和力量可能是负数,也可能是小数。我已经安排好了模式、规则和匹配器。它看起来像这样,但它并没有给我所期望的。我在StackOverflow 从java中的单个组中的字符串中查找整数或十进制的Regex?上写了这篇文章。
真正感兴趣的是捕获具有负指数和非整数的幂。。
这是我的密码:
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));
}此代码的输出为零。任何想法或建议都会很好。
谢谢
发布于 2017-01-24 03:19:16
您的基本问题是这个字符:^。它的意思是“输入的开始”,所以你的正则表达式不能匹配任何东西。
您必须将它转义为\^,这样它就变成了文字。
我还修正了你的其他要领:
String regex = "-?\\d+(\\.\\d*)?(\\^-?\\d+(\\.\\d*)?)?";见现场演示。
和使用
match.group(); // the whole match发布于 2017-01-24 03:12:47
编辑:将[0123456789]替换为(\\d)
编辑:为OP添加了上下文
回答
下面的模式应该与您所需要的相匹配:
-?(\\d)+(\\.(\\d)+)?\\^-?(\\d)+(\\.(\\d)+)?解释
-? -零或一个负符号
(\\d)+ -一个或多个数字
(\\.(\\d)+)? -(可选)小数点,后面跟着一个或多个数字
\\^ -一个插入符号
在使用String.replace(pattern, "[FOUND]")生成的输入时使用此方法:
"2.5(4x+3)[FOUND]=[FOUND]"在您回答的上下文中,只需将您的regex替换为我发布的m.group(),使用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());
}祝你好运!
https://stackoverflow.com/questions/41819131
复制相似问题