【发布时间】:2014-11-14 18:56:15
【问题描述】:
所以我遇到了一个 Perl 正则表达式“术语”,它允许您删除所有标点符号。代码如下:
$string =~ s/[[:punct:]]//g;.
但是,这会继续删除所有特殊字符。有没有办法可以修改特定的正则表达式,例如,它会删除除连字符以外的所有特殊字符。正如我在上一个关于 Perl 的问题中所说,我是该语言的新手,因此显而易见的事情对我来说并不明显。感谢所有帮助:_
【问题讨论】:
所以我遇到了一个 Perl 正则表达式“术语”,它允许您删除所有标点符号。代码如下:
$string =~ s/[[:punct:]]//g;.
但是,这会继续删除所有特殊字符。有没有办法可以修改特定的正则表达式,例如,它会删除除连字符以外的所有特殊字符。正如我在上一个关于 Perl 的问题中所说,我是该语言的新手,因此显而易见的事情对我来说并不明显。感谢所有帮助:_
【问题讨论】:
如下更改您的代码以删除除连字符以外的所有标点符号,
$string =~ s/(?!-)[[:punct:]]//g;
use strict;
use warnings;
my $string = "foo;\"-bar'.,...*(){}[]----";
$string =~ s/(?!-)[[:punct:]]//g;
print "$string\n";
输出:
foo-bar----
【讨论】:
(?!-)[[:punct:]] 就够了。
你也可以使用 unicode 属性:
$string =~ s/[^-\PP]+//g;
【讨论】: