如何在Perl中用单个空格替换多个空格?

时间:2010-10-02 18:07:03

标签: perl

为什么这不起作用?

$data = "What    is the STATUS of your mind right now?";

$data =~ tr/ +/ /;

print $data;

3 个答案:

答案 0 :(得分:29)

改为使用$data =~ s/ +/ /;

说明:

trtranslation运营商。需要注意的一点是,正则表达式修饰符不适用于翻译语句(除-之外仍然表示范围)。所以当你使用
tr/ +/ /你说的是“将角色空间和+的每个实例都带到空间”。换句话说,tr认为空格而+认为是个别字符,不是是正则表达式。

演示:

$data = "What    is the STA++TUS of your mind right now?";

$data =~ tr/ +/ /;

print $data; #Prints "What    is the STA  TUS of your mind right now?"

使用s执行您正在寻找的内容,通过说“匹配任意数量的连续空格(至少一个实例)并用单个空格替换它们”。您可能还想使用类似的东西 s/ +/ /g;如果您希望替换发生多个地方(g表示全局申请)。

答案 1 :(得分:12)

您还可以将tr与“squash”选项一起使用,这将删除重复的替换字符。有关详细信息,请参阅perlop

my $s = "foo      bar   fubb";
$s =~ tr/ //s;

答案 2 :(得分:7)

Perl 5.10有一个新的字符类\h,代表水平空白,这对于这类事情是很好的:

 $s =~ s/\h+/ /g;
相关问题