Как удалить лишние пробелы в строке с помощью регулярных выражений - PullRequest
6 голосов
/ 31 января 2011

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

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

Ответы [ 3 ]

15 голосов
/ 31 января 2011

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

s/\h+/ /g;

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

s/\v+/\n/g;

Канонизация всех пробелов:

s/[\h\v]+/ /g;
4 голосов
/ 31 января 2011

Вы можете использовать простое регулярное выражение Perl

s/\s+/ /g;

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

tr -s ' '

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

1 голос
/ 12 апреля 2013

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

Если я использую эти регулярные выражения в строке "Привет, мир" , я получу ответ как "Привет, мир"

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

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

При использовании этой информации все лишние интервалы удаляются.

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