我有一个我读过的字符串:
a+c+c+b+v+f+d+d+d+c
我需要编写程序,以便它拆分+
然后删除重复项,因此输出为:
acbvfdc
我试过tr///cs;
了,但我想我没有使用它对吗?
我有一个我读过的字符串:
a+c+c+b+v+f+d+d+d+c
我需要编写程序,以便它拆分+
然后删除重复项,因此输出为:
acbvfdc
我试过tr///cs;
了,但我想我没有使用它对吗?
#!/usr/bin/env perl
use strict; use warnings;
my @strings = qw(
a+c+c+b+v+f+d+d+d+c
alpha+bravo+bravo+bravo+charlie+delta+delta+delta+echo+delta
foo+food
bark+ark
);
for my $s (@strings) {
# Thanks @ikegami
$s =~ s/ (?<![^+]) ([^+]+) \K (?: [+] \1 )+ (?![^+]) //gx;
print "$s\n";
}
输出:
a+c+b+v+f+d+c 阿尔法+布拉沃+查理+三角洲+回声+三角洲 美食+食物 树皮+方舟
现在,您可以使用拆分字符串并且没有重复序列,split /[+]/, $s
因为拆分的第一个参数是模式。
任何阅读的人请注意:这并没有直接解决 OP 的问题,尽管在我的辩护中,这个问题的措辞模棱两可。:-) 尽管如此,它还是回答了对其他人可能提出的问题的解释,所以我将保持原样。
顺序重要吗?如果没有,您可以随时尝试这样的事情:
use strict;
use warnings;
my $string = 'a+c+c+b+v+f+d+d+d+c';
# Extract unique 'words'
my @words = keys %{{map {$_ => 1} split /\+/, $string}};
print "$_\n" for @words;
更好的是,使用 CPAN 中的 List::MoreUtils (它确实保留了顺序):
use strict;
use warnings;
use List::MoreUtils 'uniq';
my $string = 'a+c+c+b+v+f+d+d+d+c';
# Extract unique 'words'
my @words = uniq split /\+/, $string;
print "$_\n" for @words;
my $s="a+c+c+b+v+f+d+d+d+c";
$s =~ tr/+//d;
$s =~ tr/\0-\xff/\0-\xff/s;
print "$s\n"; # => acbvfdc