下面的代码:
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";
我的目标是删除这些特殊字符和空格,以便可以拆分字符串进行进一步处理。
在上面的正则表达式中,我试图删除除字母数字字符和逗号之外的所有字符。不幸的是,我得到了一个空行。我是正则表达式的初学者,我想知道我的表达式有什么问题。
5条答案
按热度按时间aelbi1ox1#
有三个错误在合谋破坏程序。如果代码顶部有
use strict
和use 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编码输出
ggazkfy82#
我试图删除除字母数字字符和逗号之外的所有字符。
您需要用途:
请注意,
^
是[...]
中的第一个字符,它对[...]
表示的字符类中的每个字符求反[^a-zA-Z0-9,]+
将匹配一个或多个非字母、数字或逗号的任意字符。1l5u6lss3#
备选方案:
例如,删除posix字母数字或逗号以外的任何内容。
a2mppw5e4#
尝试从字符串中删除特殊字符
或
n53p2ov05#
sed "s/[^a-zA-Z ]//g"
您可以在bash中执行此操作。无意义但有趣