匹配所有数字字符,不带字母或重音字母

时间:2015-08-06 09:02:25

标签: java regex

我试试这个:

\b\d+\b

但是对于这个字符串:

0225 : appt, (parking) niv -2 0015_1 5étage sqdqs25485 7871sdd

我想找到:

0225 2 0015 1

3 个答案:

答案 0 :(得分:2)

(?<![\p{M}\p{L}\d])\d+(?![\p{M}\p{L}\d])

你可以通过这种方式实现。参见演示。

https://regex101.com/r/fM9lY3/24

答案 1 :(得分:1)

尝试:

(?<![\p{L}\d])(\d+)(?![\p{L}\d])

其中:

  • (?<![\p{L}]) - 单个代码点的负面后瞻 类别&#34;字母&#34;,
  • (\d+) - 一个或多个数字,
  • (?![\p{L}]) - 单个代码点的负面预测 类别&#34;字母&#34;,

DEMO

答案 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)被破坏。

相关问题