【发布时间】:2017-01-21 12:05:57
【问题描述】:
我的任务是从带有数字和一些文本的字符串中解析整数值。数字可以使用不同的语言环境进行格式化:
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
理想情况下,我想要一个适用于任何不可打印字符的通用解决方案。
【问题讨论】:
-
ASCII 码 160 是带有重音符号的 a。不知道你是怎么收到的。
-
你知道解析输入时的语言环境吗?如果是,您可以使用不同的方法而不是包罗万象的正则表达式。例如,您可以使用策略模式并为该语言环境使用特定语法的解析器
-
如果您有硬空格,请确保您使用的是支持 Unicode 的
\s。请参阅ideone.com/jrligF,其中\s使用时没有Pattern.UNICODE_CHARACTER_CLASS标志。 -
像
(\d+[\s.,\xA0]?\d+)这样简单的东西怎么样 -
ideone.com/jKXQy2 使用
(\d+[\s.,\xA0]?\d+)
标签: java regex parsing regex-greedy