Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Удалить регулярными выражениями угловые скобки


Автор: Suppir 24.5.2013, 15:57
День добрый!

Есть строки вида:

<какой-то текст с <угловыми скобками>>
<какой-то текст с <угловыми скобками>  другой текст>

Возможно ли одним регулярным выражением привести такие строки к виду:
<какой-то текст с угловыми скобками>
<какой-то текст с угловыми скобками  другой текст>

То есть удалить все внутренние угловые скобки, но не удалять внешние угловые скобки.

Автор: Suppir 24.5.2013, 16:30
Пока что только такое придумал:

Код

text = Regex.Replace(text, "^<(.+?)<(.+?)>(.*?)>", "<$1$2$3>", RegexOptions.Multiline);

код на c#.

Но код работает, только если одна пара угловых скобок находится внутри. Если две пары или вложенные, то уже не работает.

Автор: ginnie 24.5.2013, 16:40
Предложу свой вариант:

Код

my $str = '<какой-то текст с <углов<ыми> скобками>  другой текст> и <еще <о<д>>ин>';
print $str, $/;
my $counter = 0;
$str =~ s/([<>])/sub {($_[0] eq '<' ? $counter++ : --$counter) ? '' : $_[0]}->($1)/eg;
print $str, $/;

Автор: Arantir 24.5.2013, 17:02
Код

text = "<" + Regex.Replace(text, "[<>]", "", RegexOptions.Multiline) + ">";
?

Автор: Suppir 2.6.2013, 16:32
Спасибо, оказалось, что моего варианта хватило.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)