用于调整空格的Java正则表达式

Man*_*eli 2 java regex

我知道这是这些问题的混合:从字符串中修剪空格?和正则表达式或用单个空格替换多个空间的方法.

我知道可以结合两种解决方案:

String mystring = "   brains    T1*   C+   ";
mystring = mystring.trim().replaceAll("[ ]+", " ");
Run Code Online (Sandbox Code Playgroud)

输出: brains T1* C+

但我的问题是:

是否可以制作一个正则表达式的装饰部分?

mystring.replaceAll("#regex");

das*_*ght 8

是的你可以:

mystring = mystring.replaceAll("^\\s+|(?<=\\s)\\s+|\\s+$", "");
Run Code Online (Sandbox Code Playgroud)

在ideone上演示.

这个表达式背后的想法是分别匹配初始空格和尾随空格(通过使用^\\s+\\s+$表达式),并通过在前瞻中使用它来"屏蔽"一个空格.这是最有趣的部分:(?<=\\s)\\s+- 它表示"当它们前面只有一个空格时匹配一个或多个空格".(?<=\\s)匹配我们想要保留的空间; \\s+匹配"不需要的".