Обрезать пробел от середины строки - PullRequest
11 голосов
/ 19 октября 2008

Я использую следующее регулярное выражение для захвата поля «описание» фиксированной ширины, которое всегда имеет длину 50 символов:

(?.{50})

Моя проблема в том, что описания иногда содержат лот пробелов, например,

"FLUID        COMPRESSOR                          "

Может ли кто-нибудь предоставить регулярное выражение, которое:

  1. Удаляет все пробелы с конца
  2. Сворачивает любые пробелы между словами в один пробел

Ответы [ 7 ]

15 голосов
/ 19 октября 2008

Заменить два или более пробелов на один пробел:

s/  +/ /g

Редактировать: для любых пробелов (не только пробелов) вы можете использовать \ s, если вы используете Perl-совместимую библиотеку регулярных выражений, и синтаксис фигурных скобок для числа вхождений, например,

s/\s\s+/ /g

или

s/\s{2,}/ /g

Редактировать # 2: забыл глобальный суффикс / g, спасибо JL

9 голосов
/ 20 октября 2008
str = Regex.Replace(str, " +( |$)", "$1");
2 голосов
/ 07 мая 2011

C #:

Только если вы хотите обрезать все пробелы - в начале, в конце и в середине.

     string x = Regex.Replace(x, @"\s+", " ").Trim();
2 голосов
/ 20 октября 2008

Perl-варианта: 1) s / \ s + $ //; 2) s / \ s + / / g;

1 голос
/ 09 августа 2009

Поскольку сжатие пробелов и обрезка пробелов по краям являются концептуально разными операциями, мне нравится делать это в два этапа:

re.replace("s/\s+/ /g", str.strip())

Не самый эффективный, но вполне читабельный.

1 голос
/ 19 октября 2008

Есть ли конкретная причина, по которой вы спрашиваете регулярное выражение? Возможно, они не лучший инструмент для этой задачи.

замена типа

 s/[ \t]+/ /g

должен сжимать внутренние пробелы (на самом деле, он также сжимает начальные и конечные пробелы, но это не похоже на проблему.), И

s/[ \t]+$/$/

позаботится о конце пробела. [Я использую синтаксис sed ish здесь. Вы не сказали, какой вкус вы предпочитаете.]


Сразу же я не вижу способа сделать это в одном выражении.

0 голосов
/ 13 июля 2010

/ (^ [\ s \ t] + | [\ s \ t] + ([\ s \ t] | $)) / g заменить на $ 2 (начало | середина / конец)

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