[英]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.