Я хотел бы удалить только пробелы и игнорировать табуляции в строке

#regex #perl

#регулярное выражение #perl

Вопрос:

Строка содержит как пробелы, так и табуляции. Я хотел бы удалить все вхождения пробелов в строке, но сохранить пробелы табуляции как есть. Хотелось бы сохранить табуляции, чтобы я мог использовать разделитель табуляции в Excel при импорте текстового файла Спасибо

Ответ №1:

Табуляции представляют собой символ ascii 0x09; пробелы равны 0x20. Замена пробелов не повлияет на табуляции…

 $str = "1 2 3t4 5 6t7 8 9n";
$str =~ s/ //g;
# $str is now "123t456t789n"
  

Взгляните на perlrequick для ознакомления с регулярными выражениями.

Ответ №2:

[Обычно я бы не стал отвечать на вопрос «напишите мой код за меня» подобным образом, но я подумал, что важно иметь ответ, дающий альтернативу существующему ответу на основе регулярных выражений.]

Хотя вы можете использовать s/.../.../ для удаления символов из строки, вероятно, будет излишним использовать всю мощь движка регулярных выражений Perl для выполнения чего-то столь простого, как это. Оператор транслитерации ( tr/.../.../ ) имеет /d опцию, которая удаляет определенные символы из своей целевой строки.

 #!/usr/bin/perl

use strict;
use warnings;

my $str = "1 2 3t4 5 6t7 8 9n";

print $str;

$str =~ tr/ //d;

print $str;
  

Комментарии:

1. Отличный комментарий, я использовал это давным-давно и фактически забыл об этом 🙂