我试图删除字符串中的所有单词,除了数字和给定列表(这里使用'dummy'作为示例)。我已经取得了一些进展并达到了以下阶段。
$s =~ s/[^\W\-\,0-9\s\.{dummy}]//g;
这有两个问题 - 作为虚拟子集的单词不会被删除,它会遗漏像%
等字符。
以下是示例输出。
输入字符串:I scored 75% in the final examination.
输出字符串:d 75% m.
但输出应该是75 .
。
编辑: 从我的问题的措辞可能还不清楚,但我还需要标点符号''。在最后或任何其他地方,而不会打扰他们出现的顺序。请注意,我还需要删除回车等特殊字符。
答案 0 :(得分:2)
对于标点符号,您可以使用Unicode类' Punct'。
use strict;
use warnings;
my $s = 'I scored 75% in the final examination.';
$s =~ s/\b(dummy|final)\b|[^\d\p{Punct}]/$1 if defined $1/eg;
print "$s\n";
但是,它包括.
和%
。
为了保留特定的标点符号,您可能需要定义自己的集合。
use strict;
use warnings;
my $s = 'I scored 75% in the final examination.';
$s =~ s/\b(dummy|final)\b|[^\d.,;]/$1 if defined $1/eg;
print "$s\n";
答案 1 :(得分:0)
$s =~ s/\D+//g;
这个例子应该没问题。 \ D = =非数字。
或者你需要最后一个点?