Как я могу удалить символы между <и> в Perl?

Используйте strings.Index , чтобы найти @ и срез, чтобы получить две части:

var part1, part2 string
if i := strings.Index(s, "@"); i >= 0 {
    part1, part2 = s[:i], s[i:]
} else {
    // handle case with no @
}

Запустите его на детской площадке . [115 ]

5
задан brian d foy 10 April 2009 в 15:05
поделиться

4 ответа

local $/;
my $text = <>;
s/<.*?>//gs;
print $text;
4
ответ дан 18 December 2019 в 09:53
поделиться

Неэффективный однострочный способ

perl -0777 -pe 's/<.*?>//gs'

​​так же, как и программа

local $/;
my $text = <>;
s/<.*?>//gs;
print $text;

Зависит от того, какой большой текст вы хотите конвертировать, здесь более эффективно, строка за строкой

perl -pe 'if ($a) {(s/.*?>// and do {s/<.*?>//g; $a = s/<.*//s;1}) or $_=q{}} else {s/<.*?>//g; $a = s/<.*//s}'

аналогична программе

my $a;
while (<>) {
    if ($a) {
        if (s/.*?>//) {
            s/<.*?>//g;
            $a = s/<.*//s;
        }
        else { $_ = q{} }
    }
    else {
        s/<.*?>//g;
        $a = s/<.*//s;
    }
    print;
}
1
ответ дан 18 December 2019 в 09:53
поделиться

Вы можете проверить модуль Perl Text :: Balanced , часть ядра распределение. Я думаю, что это поможет вам. Как правило, нужно избегать регулярных выражений, чтобы делать подобные вещи, если в предметном тексте, скорее всего, есть внутренний набор разделителей, он может стать очень запутанным.

6
ответ дан 18 December 2019 в 09:53
поделиться

В Perl:

#! /usr/bin/perl   
use strict;

my $text = <>;
$text =~ s/<[^>]*>//g;
print $text;

Регулярное выражение заменяет все, начиная с <до первого> (включительно), и заменяет его ни с чем. G является глобальным (более одного раза).

РЕДАКТИРОВАТЬ: включены комментарии от Hynek и хаос

6
ответ дан 18 December 2019 в 09:53
поделиться
Другие вопросы по тегам:

Похожие вопросы: