我试试这个:
\b\d+\b
但是对于这个字符串:
0225 : appt, (parking) niv -2 0015_1 5étage sqdqs25485 7871sdd
我想找到:
0225 2 0015 1
答案 0 :(得分:2)
答案 1 :(得分:1)
尝试:
(?<![\p{L}\d])(\d+)(?![\p{L}\d])
其中:
(?<![\p{L}])
- 单个代码点的负面后瞻
类别&#34;字母&#34;,(\d+)
- 一个或多个数字,(?![\p{L}])
- 单个代码点的负面预测
类别&#34;字母&#34;,答案 2 :(得分:1)
您可以使用以下代码获取所需的数字:
String s = "0225 : appt, (parking) niv -2 0015_1 5étage";
Pattern pattern = Pattern.compile("(?<=_|\\b)\\d+(?=\\b|_)", Pattern.UNICODE_CHARACTER_CLASS);
Matcher matcher = pattern.matcher(s);
while (matcher.find()){
System.out.println(matcher.group(0));
}
请参阅IDEONE demo
正则表达式表示只有前缀为\d+
或字边界(_
)且后跟字边界或下划线时才匹配1位或更多位数((?<=_|\\b)
) (?=\\b|_)
)。
使用(?U)
标记(或Pattern.UNICODE_CHARACTER_CLASS
),因为没有\b
标记的(?U)
被破坏。