Удаление текста внутри parens, но не parens в Perl

Хорошо, я получил странный, что я создавал затор на некоторое время (ум дня пятницы не работает, я предполагаю).

Делает любой знает далеко анализировать строку и удалять весь текст внутри parens, не удаляя parens самостоятельно..., но с удалением parens найденный внутри.

т.е.

myString = "this is my string (though (I) need (help) fixing it)"

после прокручивания это, что я хочу это, было бы похоже:

myString = "this is my string ()"

очень важный для хранения тех двух parens там.

6
задан James 12 February 2010 в 22:57
поделиться

3 ответа

Если вы хотите использовать регулярные выражения без использования Regexp::Common. Посмотрите на функцию "Look Around". Она была введена в Perl 5. Вы можете прочитать больше о "Look Ahead" и "Look Behind" на regular-expressions.info. Также есть раздел "Look Around" в книге "Mastering Regular Expressions". Посмотрите на странице 59.

#!/usr/bin/env perl

use Modern::Perl;

my $string = 'this is my (string (that)) I (need help fixing)';

$string =~ s/(?<=\()[^)]+[^(]+(?=\))//g;

say $string;
2
ответ дан 8 December 2019 в 12:59
поделиться

Модуль Regexp :: Common имеет дело с более чем 1 верхним уровнем круглые скобки.

use strict;
use warnings;
use Regexp::Common qw/balanced/;

my @strings = (
    '111(22(33)44)55',
    'a(b(c(d)(e))f)g(h)((i)j)',
    'this is my string (though (I) need (help) fixing it)',
);

s/$RE{balanced}{-parens=>'()'}/()/g for @strings;

print "$_\n" for @strings;

Вывод:

111()55
a()g()()
this is my string ()
10
ответ дан 8 December 2019 в 12:59
поделиться

Вам нужно снять скобки, чтобы они не начали группу захвата. Шаблон \(.+\) соответствует самой длинной подстроке, которая начинается с ( и заканчивается ). Это поглотит все до последнего ), включая все промежуточные скобки. Наконец, мы заменяем эту строку строкой, содержащей только ():

#!/usr/bin/perl

use strict; use warnings;

my $s = "this is my string (though (I) need (help) fixing it)";

$s =~ s{\(.+\)}{()};

print "$s\n";
6
ответ дан 8 December 2019 в 12:59
поделиться
Другие вопросы по тегам:

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