将字符串过滤为十进制数

时间:2015-01-01 18:06:56

标签: android regex

Here是将字符串过滤为十进制的简短示例:

String str = "a12.334tyz.78x";
str = str.replaceAll("[^\\d.]", "");

,这使12.334.78

但如何过滤第二个小数部分?我有一个字符串valued 12345.67 doll.(注意结尾处的点)。所以我只需要12345.67

很抱歉不仅仅是评论ÓscarLópez的答案,因为声誉不足。

2 个答案:

答案 0 :(得分:0)

您可以实施Negative Lookahead以删除不在数字前面的任何.

str = str.replaceAll("[^\\d.]|\\.(?!\\d)", "");
Ideone Demo

答案 1 :(得分:0)

我查了一下却不确定。 Android正则表达式(如Java)可以使用
\G断言,表示从最后一个匹配位置结束开始。

使用单个正则表达式无法解决您的问题,但可以使用
完成 两个正则表达式。

真的很简单。

两者都用于替换所有情况。

第一个只是清除你不想要的东西 用你的例子吧。

查找:"[^\\d.]+"
替换:""

第二个是:
查找:"(?:(?!\\A)\\G|(\\.))([^.]*)\\."
替换:"$1$2"

最后一个正则表达式删除了第一个后的所有点(但 NOT 是第一个) 以下是此正则表达式的细分:

 (?:
      (?! \A )             # Not at BOS
      \G                   # Start at end of last match position
   |                     # or, 
      ( \. )               # (1), One time, The first Dot in the string
 )
 ( [^.]* )            # (2), Optional any chars
 \.                   # Until we find the next extra Dot to remove

输入:

a12.334tyz.78x  

输出:

12.33478