我的意见:
my $tmp = "rrccllrrc";
Run Code Online (Sandbox Code Playgroud)
预期产出:
$tmp = "right right center center left left right right center"; #End should not be spaced definitely.
Run Code Online (Sandbox Code Playgroud)
我的代码:
$tmp=~s/c/center /g;
$tmp=~s/l/left /g;
$tmp=~s/r/right /g;
Run Code Online (Sandbox Code Playgroud)
有人可以帮助缩短尽可能多地替换正则表达式的方法.
也可以没有正则表达式
my %repl = (c => 'center', l => 'left', r => 'right');
$tmp = join ' ', map { $repl{$_} } split '', $tmp;
Run Code Online (Sandbox Code Playgroud)
带有模式的拆分''将字符串分解为其字符列表,而map使用散列将其替换为完整的单词.输出列表map由空格连接.
更新为评论
如果原始字符串包含其他字符,则可以先将其过滤掉
$tmp = join ' ', map { $repl{$_} } grep { /c|l|r/ } split '', $tmp;
Run Code Online (Sandbox Code Playgroud)
或者,map在散列中未定义的任何内容中使用空列表
$tmp = join ' ', map { $repl{$_} // () } split '', $tmp;
Run Code Online (Sandbox Code Playgroud)
这完全消除了除了之外的一切c|l|r.让他们保持在结果中
$tmp = join ' ', map { $repl{$_} // $_ } split '', $tmp;
Run Code Online (Sandbox Code Playgroud)
它们也被空间隔开.要将它们保持在一起,需要进一步调整它.
您可以在替换中使用替换哈希:
#! /usr/bin/perl
use warnings;
use strict;
use feature 'say';
my $tmp = "rrccllrrc";
my %replace = ( r => 'right',
c => 'center',
l => 'left' );
$tmp =~ s/(.)/$replace{$1} /g;
chop $tmp;
say "<$tmp>";
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
80 次 |
| 最近记录: |