繁体   English   中英

在Java正则表达式中处理Unicode符号

[英]Handling unicode symbols in Java regex

我的任务是从带有数字和一些文本的字符串中解析整数值。 数字可以使用不同的语言环境设置格式:

15 000 km
15,000 km
15.000 km

我有一个解决方案:

(\d+[[\s\.,]?\d+]*)

适用于以上示例。 但是作为一种极端情况,有一个特殊的输入机密代码160而不是常规空格(代码32):

15 000 km

如何使用Java中的正则表达式实现解决此问题?

拨弄它: http : //java-regex-tester.appspot.com/regex/5d8dd002-fe68-40c3-bf82-42e8574a2f5c

理想情况下,我想要一个通用的解决方案,该解决方案可以处理任何不可打印的字符。

您可以使用Pattern.UNICODE_CHARACTER_CLASS标志来使您的\\s Unicode感知:

String pattern = "(?U)\\d+[\\s.,]?\\d+";
                  ^^^

参见Java演示

String value1 = "15 000 km\n15,000 km\n15.000 km\n15 000 km";
String pattern1 = "(?U)\\d+[\\s.,]?\\d+";
Pattern ptrn = Pattern.compile(pattern1);
Matcher matcher = ptrn.matcher(value1);
while (matcher.find())
    System.out.println(matcher.group(0));

输出:

15 000
15,000
15.000
15 000

为什么不包括其他分隔符( )?

(\\d+(?:[\\s.,\ ]?\\d+)*)

UNICODE_CHARACTER_CLASS标志进行编译将使\\s匹配,但是有警告说它可能会变慢。 您必须进行测试以查看它对您的输入是否重要。

您可以使用这个简单的正则表达式,它匹配任意两个用0或多个非数字分隔的数字,即\\D

\d+\D*\d+

在Java中:

String regex = "\\d+\\D*\\d+";

\\D将匹配任何非数字,包括任何Unicode字符。

您更新的演示

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM