Обрезать пробелы из середины строки
Я использую следующее регулярное выражение для захвата поля описания с фиксированной шириной, длина которого всегда 50 символов:
(?.{50})
Моя проблема в том, что описания иногда содержат много пробелов, например
"FLUID COMPRESSOR "
Может ли кто-нибудь предоставить регулярное выражение, которое:
- Обрезает все пробелы с конца
- Сбрасывает пробелы между словами в одно пространство
Ответы
Ответ 1
Подставьте два или более пробела для одного пространства:
s/ +/ /g
Изменить: для любого пробела (а не только для пробелов) вы можете использовать \s, если вы используете совместимую с perl библиотеку регулярных выражений, и синтаксис фигурного скобки для количества вхождений, например
s/\s\s+/ /g
или
s/\s{2,}/ /g
Изменить №2: забыл глобальный суффикс /g, благодаря JL
Ответ 2
str = Regex.Replace(str, " +( |$)", "$1");
Ответ 3
Perl-варианта:
1) s/\ s + $//;
2) s/\ s +//g;
Ответ 4
С#:
Только если вы хотите обрезать все белые пробелы - в начале, в конце и в середине.
string x = Regex.Replace(x, @"\s+", " ").Trim();
Ответ 5
Есть ли конкретная причина, по которой вы запрашиваете регулярное выражение? Они не могут быть лучшим инструментом для этой задачи.
Замена вроде
s/[ \t]+/ /g
должен сжимать внутренние пробелы (на самом деле, он также будет сжимать ведущее и завершающее пробелы, но это не похоже на то, что это проблема.) и
s/[ \t]+$/$/
позаботится о завершающем пробеле. [Я использую синтаксис sed
ish здесь. Вы не сказали, какой вкус вы предпочитаете.]
Сразу же я не вижу способа сделать это в одном выражении.
Ответ 6
Так как сжатие пробелов и обрезка пробелов по краям - концептуально разные операции, мне нравится делать это в два этапа:
re.replace("s/\s+/ /g", str.strip())
Не самый эффективный, но вполне читаемый.
Ответ 7
/(^ [\ s\t] + | [\ s\t] + ([\ s\t] | $))/g заменить на $2 (начало | средний/конец)