除了第一个字符外,如何删除字符串中的所有非数字?

时间:2015-10-18 11:44:10

标签: java regex string

我有一个字符串,我想确保格式始终是+后跟数字 以下方法可行:

String parsed = inputString.replaceAll("[^0-9]+", "");  
if(inputString.charAt(0) == '+') {  
   result = "+" + parsed;  
}  
else {
  result = parsed;  
}  

但是有没有办法让replaceAll中的正则表达式保持+(如果存在)在字符串的开头并替换第一行中的所有非数字?

5 个答案:

答案 0 :(得分:1)

以下使用给定正则表达式的语句可以完成这项工作:

String result = inputString.replaceAll("(^\\+)|[^0-9]", "$1");
(^\\+)    find either a plus sign at the beginning of string and put it to a group ($1),
|         or
[^0-9]    find a character which is not a number
$1        and replace it with nothing or the plus sign at the start of group ($1)

答案 1 :(得分:1)

您可以使用以下表达式:

String r = s.replaceAll("((?<!^)[^0-9]|^[^0-9+])", "");

当它不是字符串的初始字符(具有lookbehind的(?<!^)[^0-9]部分)或任何不是数字或加号的字符时,想法是替换任何非数字。是字符串的初始字符(^[^0-9+]部分)。

Demo.

答案 2 :(得分:1)

怎么样只是

(?!^)\D+

Java字符串:

"(?!^)\\D+"

Demo at regex101.com

  • \D匹配不是数字的字符[^0-9]

  • (?!^)使用否定lookahead进行检查,如果它不是首字母

答案 3 :(得分:0)

是的,你可以使用这种替代品:

String parsed = inputString.replaceAll("^[^0-9+]*(\\+)|[^0-9]+", "$1");

如果存在且在字符串中的第一个数字之前,则在组1中捕获+字符。例如:dfd+sdfd12+sdf12返回+1212(第二个+是因为它的位置在第一个数字之后被删除了。

答案 4 :(得分:0)

试试这个

1-这将允许负数和正数,并且将匹配app特殊字符,除了 - 和+在第一个位置。

(?!^[-+])[^0-9.]

2-如果你只想在第一个位置允许+

(?!^[+])[^0-9.]