我正在尝试搜索此字符串:
,"tt" : "ABC","r" : "+725.00","a" : "55.30",
有关:
"r" : "725.00"
这是我目前的代码:
Pattern p = Pattern.compile("([r]\".:.\"[+|-][0-9]+.[0-9][0-9]\")");
Matcher m = p.matcher(raw_string);
我一直在尝试模式的多种变体,并且永远找不到匹配。第二组眼睛会很棒!
答案 0 :(得分:7)
你的正则表达式确实有效,几乎是正确的
Pattern p = Pattern.compile("\"[r]\".:.\"[+|-][0-9]+.[0-9][0-9]\"");
Matcher m = p.matcher(raw_string);
if (m.find()){
String res = m.toMatchResult().group(0);
}
答案 1 :(得分:4)
下一行应为:
if ( m.find() ) {
你正在那样做吗?
其他一些问题:您正在使用.
来匹配冒号周围的空格;如果它总是应该是空格,那么你应该使用+
(一个或多个空格)或\s+
(一个或多个空格字符)。另一方面,数字之间的点应该与文字.
匹配,所以你应该转义它:\.
当然,因为这是一个Java字符串文字,你需要转义反斜杠:\\s+
,\\.
。
您不需要r
周围的方括号,如果您不想匹配数字前面的|
,则应将[+|-]
更改为{{ 1}}。
虽然我提到的其中一些问题可能导致误报,但是没有一个会阻止匹配有效输入。这就是为什么我怀疑你实际上没有通过调用[+-]
来应用正则表达式。这是一个常见的错误。
答案 2 :(得分:0)
首先尝试逃避点符号:... [0-9]+\.[0-9][0-9]
...
因为点符号匹配任何字符...
第二件事:[+|-]
定义一系列字符,但它是强制性的......
试试[+|-]?
阿尔