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

TCM*_*TCM 12 perl

为什么这不起作用?

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

$data =~ tr/ +/ /;

print $data;
Run Code Online (Sandbox Code Playgroud)

eld*_*his 29

$data =~ s/ +/ /;改用.

说明:

tr翻译运营商.需要注意的一点是,正则表达式修饰符不适用于翻译语句(除了-仍然表示范围).因此,当你使用时,
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?"
Run Code Online (Sandbox Code Playgroud)

使用s它,你在找什么,说"匹配任何数量的连续空间(至少一个实例),并用一个空格代替他们".您可能还想使用某些内容,例如,
s/ +/ /g;如果您希望替换发生在多个地方(g意味着全局应用).


FMc*_*FMc 12

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

my $s = "foo      bar   fubb";
$s =~ tr/ //s;
Run Code Online (Sandbox Code Playgroud)


bri*_*foy 8

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

 $s =~ s/\h+/ /g;
Run Code Online (Sandbox Code Playgroud)