String myString1 = "22223 2342 1 98 333 3 665"
String myString2 = "22323 3 222 34 33 1 98"
我只想提取有1位,那么空间的价值,那么只有两个数字。
private static final Pattern p3DigitsGap = Pattern.compile(".*\\b\\d\\s\\d{2}\\b.*");
在上述两个串,我想找提取“1 98”我不能只用空白任一侧分割的情况下,该图案是在所述字符串的末尾。
Matcher matcher = p3DigitsGap.matcher(myString1);
if (matcher.find()) {
Log.i("Matcher found");
while (matcher.find() == true) {
Log.i("Matcher is true");
String extract = matcher.group(1);
Log.d("extract: " + extract);
}
}
如果我删除while循环,则字符串提取不会填充并引发超出边界异常。我在while循环中添加了并且matcher.find()不等于true。
我想换我的模式:
Pattern p3DigitsGap = Pattern.compile("[^0-9a-z]\\d\\s\\d{2}[^0-9a-z]");
我认为使用* \\ B的可能会造成问题,但我得到了相同的结果。
请有人帮助我了解我哪里出错了。
在此先感谢。
回答编辑:我标记了Reimeus的正确答案,因为它通过使用上述正则表达式的组来工作。另请参阅Tim Pietzcker提供的替代解决方案,以改进我的原始正则表达式。
非常感谢!如果我稍微调整你的答案,使得括号包围(\\ d \\ s \\ d {2}),我会得到正确的输出“1 98”。是对的吗? – brandall
是的,你是对的,我的不好,忘记了这个空间和2位数,已经更新了正确的答案 – Reimeus
@andjav在你的输入是''1 98 333 3 665''或'22223 2342 1 98 “',看我的答案! – turtledove