2015-10-18 39 views
2

我有一个字符串,我想确保格式始终是+后跟数字。
下面将工作:如何除掉第一个字符以外的字符串中的所有非数字?

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

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

+0

NB:'replaceAll'将不添加'+'的情况下,有没有,所以我不明白你正在寻找 – 2015-10-18 12:14:50

+0

[This regex](https:// regex101。我相信:搜索'(^ [+])| [^ 0-9] +'并替换为'$ 1'。 –

+0

从你的代码中,你似乎允许输入诸如'abd + 3G45; {',这对我来说不太合理。您可能想要声明输入匹配某种模式'[+]?\ s * \ d + \ s *'而不是(白名单)。 – nhahtdh

回答

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) 
+0

'+'在输入中丢失了,例如'+ 345HHHH' – nhahtdh

+0

@nhahtdh感谢您解决这个问题。我用'|'(或)替换了'?'(零或一)来改变正则表达式。现在它正确输出'+ 345'。 – bobbel

1

您可以使用此表达式:

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

的想法是,以取代任何非当它不是字符串的首字符(这是带有倒序的(?<!^)[^0-9]部分)或任何不是数字的字符或加上这是字符串的初始字符(^[^0-9+]部分)。

Demo.

+0

但是,唯一可接受的非数字作为字符串的初始字符是'+'。这个正则表达式允许任何非字符,对吗? – Jim

+0

等同于'.replaceAll(“(^ \\ +)?[^ 0-9] +”,“$ 1”)',否? – 2015-10-18 12:17:25

+0

@Jim不,只允许加+。请参阅演示。其中一个输入字符串是“a56b78”,它变成了“5678”。 – dasblinkenlight

0

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

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

如果存在与字符串中的第一个数字前,+字符组1捕获例如:dfd+sdfd12+sdf12回报+1212(第二个+已被移除,因为它的位置在第一个数字之后)。

1

什么只是

(?!^)\D+ 

Java字符串:

"(?!^)\\D+" 

Demo at regex101.com

  • \D一个字符不是一个数字[^0-9]

  • 匹配10
  • (?!^)使用负lookahead来检查,如果不是最初的字符

0

试试这个

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

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

2 - 如果你只想让+在第一位置

(?!^[+])[^0-9.] 
相关问题