我的意见:
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;
有人可以帮助缩短尽可能多地替换正则表达式的方法.
解决方法
也可以没有正则表达式
my %repl = (c => 'center',l => 'left',r => 'right'); $tmp = join ' ',map { $repl{$_} } split '',$tmp;
具有模式’的split将字符串分解为其字符列表,map使用散列将其全部替换为全字.地图的输出列表由空格连接.
更新为评论
如果原始字符串包含其他字符,则可以先将其过滤掉
$tmp = join ' ',map { $repl{$_} } grep { /c|l|r/ } split '',$tmp;
或者,在地图中使用空列表中的任何未在散列中定义的内容
$tmp = join ' ',map { $repl{$_} // () } split '',$tmp;
这除了c | l | r之外完全删除了所有内容.让他们保持在结果中
$tmp = join ' ',map { $repl{$_} // $_ } split '',$tmp;
它们也被空间隔开.要将它们保持在一起,需要进一步调整它.