2016-11-28 58 views
3

我想刪除任何單個字符(包括字符串開頭或結尾的單個字符)。 例如,java正則表達式用空格替換任何單個字符

String s = "I am testing regex. This'll print results for A B c d^* () { } [ ] done ."; 
System.out.println(s); 

應打印:

am testing regex. This'll print results for   done 

我想:

s = s.replaceAll("(\\s+.(?=\\s))", " "); 

這給了我:

I am testing regex. This'll print results for   done . 

我想在同一個正則表達式中刪除開始和結束單個字符。

+2

任何*非空白*字符?試試['.replaceAll(「(?<!\\ S)\\ S(?!\\ S)」,「」)'](https://regex101.com/r/8mh9V8/1),或許,對結果使用'trim()'。 –

+0

任何字符(包括「\ t」等空格字符)。 – Alisa

+0

或者.replaceAll(「(?<!\\ S)[^](?!\\ S)」,「」)或'.replaceAll(「(?s)(?<!\\ S))。 (?!\\ S)「,」「)'應該有效。 –

回答

1

您可以使用

.replaceAll("(?s)(?<!\\S).(?!\\S)", " ") 

.replaceAll("(?<!\\S)[^ ](?!\\S)", " ") 

,或許,在結果使用trim()。請參閱regex demo

詳細

  • (?s) - 一個DOTALL嵌入標誌的選項(以便.可以匹配任何字符,包括換行碼元)
  • (?<!\S) - 負回顧後需要串的開始或一個空白在當前位置之前
  • . - (消耗部分)任何單個字符(如果它必須是空格,則使用[^ ]
  • (?!\S) - 負向超前,要求當前位置右側的字符串結束或空白。

請注意,您可能會根據需要進一步調整消耗零件。如果您只需要匹配非空白字符,請將.替換爲\S