Удаление всех пробельных символов, кроме ""
Я считаю себя довольно неплохо с регулярными выражениями, но это выглядит неожиданно сложно: я хочу обрезать пробелы 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 ]+
от первого ответа, но принцип другой, и хорошо знать оба.