使用java替换用空格包围非数字的单个数字

时间:2014-10-16 12:44:00

标签: java regex

我想用字符串中的空格替换围绕alpha charactors [a-zA-Z]的单个数字,如下所示。

"Foo 12 Bar" => "Foo 12 Bar" //1 and 2 shouldn’t be replaced
"Foo12Bar"   => "Foo12Bar"   // 1 and 2 shouldn’t be replaced
"Foo1Bar"    => "Foo Bar"    //1 shouldn’t be replaced
"Foo2Bar"    => "Foo Bar"    //2 shouldn’t be replaced
"Foo 1Bar"   => "Foo 1Bar"   //1 shouldn’t be replaced(space @ left side)

对此有何帮助?

4 个答案:

答案 0 :(得分:3)

您可以将此模式与空格替换使用:

(?<=[^0-9\\s])[0-9](?=[^0-9\\s])

(?<=...)(?=...)分别是lookbehind和lookahead断言。这只是检查,这些括号之间描述的内容不是匹配结果的一部分。因此,之前和之后的字符不会被替换。

答案 1 :(得分:3)

您可以尝试这样的正则表达式:

public static void main(String[] args) {
        String s1= "Foo1Bar";
        String s2 = "Foo11bar";
        String s3 = "foo1bar2";
        String regex = "(?<=[a-zA-Z])\\d(?=[a-zA-Z])";// positive look-behind and positive look-ahead for characters a-z A-Z surrounding digit
        System.out.println(s1.replaceAll(regex, " "));
        System.out.println(s2.replaceAll(regex, " "));
        System.out.println(s3.replaceAll(regex, " "));
    }

O / P:

Foo Bar
Foo11bar
foo bar2

答案 2 :(得分:2)

您可以对字符串对象使用正则表达式replaceAll调用。用空字符串替换(?<!\d)(?<! )\d(?!\d)(?! )

答案 3 :(得分:0)

input.replaceAll("([^\\d])\\d([^\\d])", "$1$2");

使用的正则表达式匹配由任何非数字字符包围的数字。因此,整个匹配仅由匹配&#34; \ d&#34;的单个数字字符之前和之后的字符替换。