Удаление всех пробельных символов, кроме ""

Я считаю себя довольно неплохо с регулярными выражениями, но это выглядит неожиданно сложно: я хочу обрезать пробелы all, кроме символа пробела: ' '.

В Java, RegEx, который я пробовал, есть: [\s-[ ]], но этот также удаляет ' '.

UPDATE:

Вот конкретная строка, которую я пытаюсь удалить из:

project team                manage key

Примечание: это будут символы между "командой" и "управлять". Они отображаются как длинное пространство при редактировании этого сообщения, но отображаются как одно пространство в режиме просмотра.

Ответ 1

Попробуйте использовать это регулярное выражение:

[^\S ]+

Это немного запутанно читать из-за двойного отрицательного. Регулярное выражение [\S ] соответствует символам, которые вы хотите сохранить, т.е. Пробелу или чему-либо, что не является пробелом. Поэтому отрицательный класс символов [^\S ] должен соответствовать всем символам, которые вы хотите удалить.

Ответ 2

Использование Guava CharMatcher:

String text = ...
String stripped = CharMatcher.WHITESPACE.and(CharMatcher.isNot(' '))
    .removeFrom(text);

Если вы просто хотите, чтобы это было отрезано от начала и конца строки (например, String.trim()), вы использовали бы trimFrom, а не removeFrom.

Ответ 3

В Java нет вычитания классов символов, иначе вы можете использовать [\s--[ ]], обратите внимание на двойную тире. Вы всегда можете моделировать вычитание множества с помощью пересечения с дополнением, поэтому

[\s&&[^ ]]

должен работать. Это не лучше, чем [^\S ]+ от первого ответа, но принцип другой, и хорошо знать оба.