我想用字符串中的空格替换围绕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)
对此有何帮助?
答案 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;的单个数字字符之前和之后的字符替换。