正则表达式示例

时间:2015-09-29 12:03:27

标签: java regex

我在文件中重复了示例内容字符串,我想从中检索它的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();

上面的表达式找到任何匹配并抛出异常.. 谢谢你的帮助

2 个答案:

答案 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();