Perl regex -删除除字母数字字符和逗号之外的所有字符

4ktjp1zp  于 2022-11-15  发布在  Perl
关注(0)|答案(5)|浏览(156)

下面的代码:

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";

我的目标是删除这些特殊字符和空格,以便可以拆分字符串进行进一步处理。
在上面的正则表达式中,我试图删除除字母数字字符和逗号之外的所有字符。不幸的是,我得到了一个空行。我是正则表达式的初学者,我想知道我的表达式有什么问题。

aelbi1ox

aelbi1ox1#

有三个错误在合谋破坏程序。如果代码顶部有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: $str\n";

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

print "Post: $str\n";

输出

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

ggazkfy82#

我试图删除除字母数字字符和逗号之外的所有字符。
您需要用途:

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

请注意,^[...]中的第一个字符,它对[...]表示的字符类中的每个字符求反
[^a-zA-Z0-9,]+将匹配一个或多个非字母、数字或逗号的任意字符。

1l5u6lss

1l5u6lss3#

备选方案:

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

例如,删除posix字母数字或逗号以外的任何内容。

a2mppw5e

a2mppw5e4#

尝试从字符串中删除特殊字符

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

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

n53p2ov05#

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

相关问题