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 个以上的撇号序列,请改用正则表达式 '('?)'*
。
从字符串中删除特定字符的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 个以上的撇号序列,请改用正则表达式 '('?)'*
。