如何从Perl中的字符串中删除最后一个逗号

时间:2018-10-14 20:39:00

标签: regex perl

我有一个来自原始数据的字符串。我不能保证可能会有或没有多余的逗号。我以为我可以这样删除它:

<link href='styles.css' rel='stylesheet'>

不幸的是,这不起作用。当然,我可以做一个循环来逐个检查字符串的最后一个字符,但是我想学习如何使用Regex反斜杠方法。

有人可以帮我吗?

6 个答案:

答案 0 :(得分:3)

尝试一下

$value =~ s/,\s*$//;

模式,\s*$匹配一个逗号(,),后跟零个或多个空格字符(\s*),然后是行/输入的结尾({{1} }。

答案 1 :(得分:3)

s/,//删除第一个逗号。所以,

$value = reverse(reverse($value) =~ s/,//r);

答案 2 :(得分:2)

不确定为什么要在代码中指定/ r而不使用返回值。如果实际上您正在使用它,请将其重新添加。

s/.*\K,//

啊,如果您不希望有逗号结尾,这将不起作用;它将始终删除最后一个逗号。然后使用巴特的答案。

答案 3 :(得分:1)

可接受的答案将删除逗号,并在字符串末尾添加零个或多个空格字符。但是您问过要删除最后一个逗号。两者都与您的示例一致,但是如果您确实要删除最后一个逗号,则一种方法是:

"foo,bar,baz"

例如,这会将"foo,barbaz", and in your example更改为to“猫,狗,鱼,” reverse“猫,狗,鱼”(保留尾随空格)。< / p>

choruba的答案中的{{1}}技巧也有效。

如果没有别的,这表明了准确的问题陈述的重要性。

答案 4 :(得分:1)

使用正面的眼光

$value =~ s/,(?=[^,]*\z)//;

答案 5 :(得分:0)

我建议使用以下模式:,*\s*$。它匹配所有逗号(如果有)和所有空格(如果有)以及字符串的结尾。

完整示例:

use 5.18.2;
use strict ;
use warnings ;
use Data::Dumper;

my $data = "cat, dog, fish,,,,,,,,,,,,,                          ";                                                                                   
$data =~ s/,*\s*$// ;
print $data;