我试图在java字符串中获取所有匹配项。匹配必须是数学方程式中的基数和幂。如您所知,基数和权力也可能是负数和小数。我有模式,正则表达式和匹配器设置。它看起来像这样,但它没有给我我期望的东西。我在StackOverflow Regex to find integer or decimal from a string in java in a single group?
上通过这篇文章引导自己我真的只想捕捉具有负整数和非整数指数的权力。
这是我的代码:
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));
}
此代码的输出无效。任何想法或建议都会很棒。
感谢
答案 0 :(得分:1)
你的基本问题是这个角色:^
。这意味着"开始输入",所以你的正则表达式无法匹配。
你必须逃避它\^
所以它变成了文字。
我还修复了你的正则表达式的其余部分:
String regex = "-?\\d+(\\.\\d*)?(\\^-?\\d+(\\.\\d*)?)?";
请参阅live demo。
并使用
match.group(); // the whole match
答案 1 :(得分:0)
编辑:将[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());
}
。
$scope
祝你好运!