我在文件中重复了示例内容字符串,我想从中检索它的double值。字符串内容为"(AIC)| 234.654 |"我想从那里找回234.654 ......"(AIC)|"总是固定但数字在其他场合会改变所以我使用正则表达式如下...但它表示没有匹配使用下面的表达式..任何帮助将不胜感激
String contents="(AIC)|234.654 |";
Pattern p = Pattern.compile("AIC\\u0029{1}\\u007C{1}\\d+u002E{1}\\d+");
Matcher m = p.matcher(contents);
boolean b = m.find();
String t=m.group();
上面的表达式找到任何匹配并抛出异常.. 谢谢你的帮助
答案 0 :(得分:1)
您的代码有几个拼写错误,但除此之外,您说您需要匹配括号内的数字,但您指的是与.group(1)
的完整匹配。您需要设置一个捕获组以使用String content="(AIC)|234.654 |";
Pattern p = Pattern.compile("AIC\\)\\|(\\d+\\.\\d+)");
Matcher m = p.matcher(content);
if (m.find())
{
System.out.println(m.group(1));
}
访问该号码。
这是一个固定的代码:
Pattern.compile("AIC\\)\\|(\\d+(?:\\.\\d+)?)");
请参阅IDEONE demo
如果数字可以是整数,只需在小数部分周围使用可选的非捕获组:{{1}}
答案 1 :(得分:0)
我认为这个正则表达式应该做的工作:
(?<=\|)[\d\.]*(?=\s*\|)
它只会匹配|
之后和可选空格之前的数字和点以及另一个|
完整的代码:
String content="(AIC)|234.654 |";
Pattern p = Pattern.compile("(?<=\\|)[\\d\\.]*(?=\\s*\\|)");
Matcher m = p.matcher(content);
boolean b = m.find();
String t=m.group();