用于条件删除空格的Java Pattern RegEx

时间:2013-12-09 20:13:41

标签: java regex

我已经搜索了几个小时的答案,但仍然没有接近解决特定的编程困境。这既不适合学校也不适合工作。我正在开发一个需要根据正则表达式执行预定义数据清理任务的应用程序。我遇到的一个具体表达方式是删除单词和数字之间的空白字符。以下是示例要求:

word 123           ==> word123
123 word           ==> 123word
world 123 wide     ==> word123wide
world wide 123     ==> world wide123
world wide 123 456 ==> world wide123 456

RegEx环视似乎是正确的方法,但仍无法弄清楚如何将表达式应用于具有2个以上字块的短语。

提前致谢。

1 个答案:

答案 0 :(得分:4)

在两个Pattern之间使用外观和交替的组合,如下:

//                | preceded by digit
//                |      | one whitespace
//                |      |   | followed by non-digit
//                |      |   |      | OR
//                |      |   |      | | preceded by non-digit
//                |      |   |      | |      | one whitespace
//                |      |   |      | |      |   | followed by digit
String pattern = "(?<=\\d)\\s(?=\\D)|(?<=\\D)\\s(?=\\d)";
// test Strings
String test0 = "word 123";
String test1 = "123 word";
String test2 = "world 123 wide";
String test3 = "world wide 123";
String test4 = "world wide 123 456";
// testing output: replace all found matches
// (e.g. one per String in this case)
// with empty
System.out.println(test0.replaceAll(pattern, ""));
System.out.println(test1.replaceAll(pattern, ""));
System.out.println(test2.replaceAll(pattern, ""));
System.out.println(test3.replaceAll(pattern, ""));
System.out.println(test4.replaceAll(pattern, ""));

输出:

word123
123word
world123wide
world wide123
world wide123 456