簡體   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