繁体   English   中英

在Perl中,如何从字符串中删除连续的字符对?

[英]In Perl, how do I remove consecutive pairs of characters from a string?

我有一个包含字符对的字符串,我想用一个字符替换每个运行。 我怎样才能做到这一点?


这是官方常见问题解答中的一个问题 我们将perlfaq导入Stack Overflow

(这是官方的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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM