[英]In Perl, how do I remove consecutive pairs of characters from a string?
(这是官方的perlfaq答案 ,减去任何后续编辑)
您可以使用替换运算符查找字符对(或字符集)并将其替换为单个实例。 在这个替换中,我们在(.)
找到一个字符。 内存括号将匹配的字符存储在后引用\\g1
,我们使用它来要求紧跟其后的相同内容。 我们用$1
的字符替换字符串的那部分。
s/(.)\g1/$1/g; # 5.10 or later
s/(.)\1/$1/g; # earlier versions
我们也可以使用音译运算符tr///
。 在这个例子中,我们的tr///
的搜索列表方面什么都没有,但是c选项补充了它,所以它包含了所有内容。 替换列表也没有任何内容,因此音译几乎是无操作,因为它不会进行任何替换(或者更确切地说,将字符替换为自身)。 但是, s
选项会压缩字符串中的重复字符和连续字符,因此字符不会显示在其自身旁边
my $str = 'Haarlem'; # in the Netherlands
$str =~ tr///cs; # Now Harlem, like in New York
$str=~ s/(.)\1+/$1/g;
这是来自上一个稳定版本的perlfaq4的答案:
如何删除连续的字符对?
(由brian d foy提供)
您可以使用替换运算符查找字符对(或字符集)并将其替换为单个实例。 在这个替换中,我们在(。)中找到一个字符。 内存括号将匹配的字符存储在后引用\\ 1中,我们使用它来要求紧跟其后的相同内容。 我们用$ 1中的字符替换字符串的那部分。
s/(.)\1/$1/g;
我们也可以使用音译运算符tr ///。 在这个例子中,我们的tr ///的搜索列表方面什么都没有,但是c选项补充了它,所以它包含了所有内容。 替换列表也没有任何内容,因此音译几乎是无操作,因为它不会进行任何替换(或者更确切地说,将字符替换为自身)。 但是,s选项会压缩字符串中的重复字符和连续字符,因此字符不会显示在其自身旁边
my $str = 'Haarlem'; # in the Netherlands
$str =~ tr///cs; # Now Harlem, like in New York
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.