我的意见:
my $tmp = "rrccllrrc";
预期产出:
$tmp = "right right center center left left right right center"; #End should not be spaced definitely.
我的代码:
$tmp=~s/c/center /g;
$tmp=~s/l/left /g;
$tmp=~s/r/right /g;
有人可以帮助缩短更换正则表达式的方法。
答案 0 :(得分:7)
也可以没有正则表达式
my %repl = (c => 'center', l => 'left', r => 'right');
$tmp = join ' ', map { $repl{$_} } split '', $tmp;
模式''
的{{3}}将字符串分解为字符列表,split使用散列将其全部替换为全字。 map
的输出列表由空格连接。
已更新为评论
如果原始字符串包含其他字符,可以先将其过滤掉
$tmp = join ' ', map { $repl{$_} } grep { /c|l|r/ } split '', $tmp;
或者,在map
中使用空列表来查找散列中未定义的任何内容
$tmp = join ' ', map { $repl{$_} // () } split '', $tmp;
除了c|l|r
之外,它完全删除了所有内容。将它们保留在结果中
$tmp = join ' ', map { $repl{$_} // $_ } split '', $tmp;
它们也被空格分开。为了让他们在一起需要进一步调整它。
答案 1 :(得分:6)
您可以在替换中使用替换哈希:
{{1}}