繁体   English   中英

如何去除字符串中除第一个字符以外的所有非数字?

[英]How can I strip all non digits in a string except the first character?

我有一个字符串,我想确保格式始终为+后跟数字。
以下将起作用:

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

但是,是否可以在replaceAll中使用正则表达式,从而将+ (如果存在)保留在字符串的开头,并替换第一行中的所有非数字?

以下带有给定正则表达式的语句可以完成此工作:

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)

您可以使用以下表达式:

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

这个想法是当它不是字符串的初始字符(即(?<!^)[^0-9]部分用后置字符)或任何不是数字或加号的字符替换掉任何非数字是字符串的初始字符( ^[^0-9+]部分)。

演示

那怎么办

(?!^)\D+

Java字符串:

"(?!^)\\D+"

演示在regex101.com

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

  • (?!^)使用否定的超前查询来检查它是否不是初始字符

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

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

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

尝试这个

1-这将允许负数和正数,并且将匹配应用程序特殊字符,但第一个位置的-和+除外。

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

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

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

暂无
暂无

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

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