Удаление всех пробельных символов, кроме "" - PullRequest
13 голосов
/ 05 февраля 2011

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

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

UPDATE:

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

project team                manage key

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

Ответы [ 3 ]

23 голосов
/ 05 февраля 2011

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

[^\S ]+

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

7 голосов
/ 05 февраля 2011

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

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

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

3 голосов
/ 05 февраля 2011

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

[\s&&[^ ]]

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...