我写正则表达式来删除字符串中的多个空格.代码很简单:
my $string = 'A string has more than 1 space';
$string = s/\s+/\s/g;
Run Code Online (Sandbox Code Playgroud)
但是,结果是坏事:'Asstringshassmoresthans1sspace'.它用's'字符替换每个空格.
有一个解决方法,而不是使用\ s进行替换,我使用''.所以正则表达式变成:
$string = s/\s+/ /g;
Run Code Online (Sandbox Code Playgroud)
为什么正则表达式不起作用?
\s只是正则表达式中的元字符(它不仅仅匹配一个空格,例如制表符,换行符和换页符),而不是替换字符串.如果要用单个空格替换所有空格,请使用简单空格(如您所做):
$string = s/\s+/ /g;
Run Code Online (Sandbox Code Playgroud)
如果您只想影响实际的空格字符,请使用
$string = s/ {2,}/ /g;
Run Code Online (Sandbox Code Playgroud)
(无需用自己替换单个空格).