Как удалить лишние пробелы в строке с помощью Regex

У меня есть ряд абзацев, которые я хочу разобрать с использованием регулярных выражений, но, к сожалению, абзац появляется со многими пробелами между предложениями, а иногда и словами. Я хотел бы иметь возможность удалить все лишнее белое пространство, но я не уверен, как это сделать... У кого-нибудь есть идеи? Я не хочу удалять все пробелы, что является единственным, что я нашел до сих пор, но сохранить обычный формат абзаца, так как после каждого слова есть пробел, и после каждого пунктуация+слово имеют пробел. Я кодирую на Perl.

любая помощь будет оценили!

3 ответов


канонизировать горизонтальные пробелы:

s/\h+/ /g;

канонизация вертикальных пробелов:

s/\v+/\n/g;

канонизировать все пробелы:

s/[\h\v]+/ /g;

вы можете использовать простой Perl regex

s/\s+/ /g;

FYI, такого рода вещи лучше всего делать с помощью инструмента unix tr

tr -s ' '

будет сжать пробелы на один пробел.


оба вышеприведенных ответа дают результат, но в обоих случаях в начале и конце строки есть пробел.

Если я использую эти регулярные выражения в string " Здравствуй, мир!", я получаю ответ " Здравствуй, мир!"

чтобы получить результат как "Здравствуй, мир!", следующее регулярное выражение perl будет работать нормально

$a =~ s/(?<!\w) //g;

используя look-behind здесь, все дополнительные интервалы удаляются.