Perl удаляет символ из строки, если он не является дубликатом - PullRequest
0 голосов
/ 26 ноября 2018

Какой самый чистый / простой способ удалить определенный символ из строки , если не повторяется один раз.

Например, с учетом следующей строки:

'it''s 'simple'

Я ожидаю:

it's simple

Для моего использования в строке не должно быть более двух символов.

Ответы [ 2 ]

0 голосов
/ 26 ноября 2018
use warnings;
use strict;

my $text = q!'it''s 'simple'!;
$text =~ s/'('?)/$1/g;
print "$text\n";

Таким образом, в регулярном выражении '('?) оно будет совпадать - и удаляться - первым ' и, если за ним последует другое, захватит его и поместит в результат.

Эта версиябудет обрабатывать каждую группу апострофов отдельно (потому что OP использовал термин «дубликат» вместо «несколько»).Если вы хотите заменить любую последовательность апострофов 2+ одной, используйте вместо нее регулярное выражение '('?)'*.

0 голосов
/ 26 ноября 2018

Использовать отрицательное прогнозное утверждение.

#!/use/bin/perl

use strict;
use warnings;
use feature 'say';

$_ = "'it''s simple'";

say;

s/'(?!')//g;

say;

'(?!') означает «одинарную кавычку, за которой сразу не следует еще одна одинарная кавычка».

Вывод:

'it''s simple'
it's simple
...