#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. Отличный комментарий, я использовал это давным-давно и фактически забыл об этом
![]()