Perl删除除字母数字字符和逗号以外的所有字符



我有以下代码:

my $str = 'Uploaded 07-02▒05:14, Size 212.14▒MiB, ULed by someone';
print "Pre:".$str."n";
my $str =~ s/^[a-zA-z0-9,]//g;
print "Post:".$str."n";

我的目的是删除那些特殊字符和空格,以便我可以拆分字符串以进行进一步处理。

使用上面的正则表达式,我试图删除除字母数字字符和逗号以外的所有字符。不幸的是,我得到了一个空行。我是regex的初学者,想知道我的表达式有什么问题。

您有三个错误共同破坏您的程序。如果你在你的代码顶部有use strictuse warnings,你应该有,那么Perl会打印消息来提醒你

  • 您已经声明了第二个$str,因此它是undef,并打印为空字符串

  • 您在字符类之外有插入符号,因此它充当字符串开始锚,而不是否定类

  • 你有[a-zA-z0-9]作为你的角色类。A-z包含字符[]^_`以及大小写字母。你需要[a-zA-Z0-9]代替

下面是一些工作代码。您的文本字符串包含一个Unicode字符U+2592 Medium Shade所以我不得不use utf8将代码标记为以UTF-8编码,use open设置STDOUT以接受UTF-8编码

use utf8;
use strict;
use warnings;
use open qw/ :std :encoding(utf-8) /;
my $str = 'Uploaded 07-02▒05:14, Size 212.14▒MiB, ULed by someone';
print "Pre: $strn";
$str =~ s/[^a-zA-Z0-9,]//g;
print "Post: $strn";

输出
Pre: Uploaded 07-02▒05:14, Size 212.14▒MiB, ULed by someone
Post: Uploaded07020514,Size21214MiB,ULedbysomeone

我试图删除除字母数字字符和逗号以外的所有字符。

你需要使用:

$str =~ s/[^a-zA-Z0-9,]+//g;

注意^作为[...]中的第一个字符,它否定了由[...]表示的字符类中的所有字符

[^a-zA-Z0-9,]+将匹配1个或多个非字母、数字或逗号的字符。

备选项:

$str =~ s/[^p{PosixAlnum},]//g;

。删除任何非正、字母、数字或逗号的内容

尝试从字符串

中删除特殊字符
$str =~ s/[^[:print:]]//g;

$str =~ s/[^[print:]]//g;

sed "s/[^a-zA-Z ]//g"您可以在bash中完成此操作。无意义但有趣

最新更新