Perl 从字符串中删除一个字符,除非它是重复的

Perl delete a character from a string unless it is a duplicate

从字符串中删除特定字符的cleanest/simplest方法是什么除非重复一次。

例如给定以下字符串:

'it''s 'simple'

我预计:

it's simple

在我的用法中,连续的 ' 字符永远不会超过两个。

使用否定的先行断言。

#!/use/bin/perl

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

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

say;

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

say;

'(?!') 表示 "a single quote that isn't followed immediately by another single quote".

输出:

'it''s simple'
it's simple
use warnings;
use strict;

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

因此在正则表达式 '('?) 中,它将匹配并删除第一个 ',如果后面跟着另一个,将捕获它并将其放入结果中。

此版本将分别处理每一个或两个撇号组(因为 OP 使用术语 "duplicate" 而不是 "multiple")。如果您想用一个单引号序列替换任何 2 个以上的撇号序列,请改用正则表达式 '('?)'*