假设我有一个字符串。
String str = "Hello6 9World 2, Nic8e D7ay!";
Matcher match = Pattern.compile("\\d+").matcher(str);
上面的行会给我6,9,2,8和7,这是完美的!
但如果我的字符串改为..
String str = "Hello69World 2, Nic8e D7ay!";
请注意,此字符串中将删除6到9之间的空格。
如果我跑...
Matcher match = Pattern.compile("\\d+").matcher(str);
它会给我69,2,8和7。
我的要求是仅提取单个数字。在这里,我需要的是2,8,7和省略69。
你可以帮助我改善我的正则表达式吗?谢谢!答案 0 :(得分:6)
对于每个数字,您必须检查是否未遵循或先于a 数字
你可以试试这个:
public static void main(String[] args) {
String str = "Hello69World 2, Nic8e D7ay!";
Pattern p = Pattern.compile("(?<!\\d)\\d(?!\\d)");
Matcher m = p.matcher(str);
while (m.find()) {
System.out.println(m.group());
}
System.out.println("***********");
str = "Hello6 9World 2, Nic8e D7ay!";
m = p.matcher(str);
while (m.find()) {
System.out.println(m.group());
}
}
O / P:
2
8
7
***********
6
9
2
8
7