【问题标题】:How to delete all words except numbers and a given list?如何删除除数字和给定列表之外的所有单词?
【发布时间】:2014-06-16 11:19:16
【问题描述】:

我试图删除字符串中除数字和给定列表之外的所有单词(此处以“dummy”为例)。我已经能够取得一些进展,并达到了以下阶段。

$s =~  s/[^\W\-\,0-9\s\.{dummy}]//g;

这有两个问题——作为 dummy 子集的单词不会被删除,并且会遗漏% 等字符。

这是示例输出。

输入字符串:I scored 75% in the final examination.

输出字符串:d 75% m.

但是输出应该是75 .

编辑: 从我的问题的措辞可能不清楚,但我还需要有像“。”这样的标点符号。在最后或任何其他地方,而不会扰乱它们出现的顺序。请注意,我还需要删除回车等特殊字符。

【问题讨论】:

    标签: regex perl


    【解决方案1】:

    对于标点符号,您可以使用 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";
    

    【讨论】:

    • 这里不占车的特殊词也需要保留。
    【解决方案2】:

    $s =~ s/\D+//g; 这个例子应该没​​问题。 \D 是 = 非数字。

    或者你需要最后一个点?

    【讨论】:

    • 我也需要标点符号。抱歉,我忘了在问题中添加它。我现在将对其进行编辑。
    猜你喜欢
    • 1970-01-01
    • 2020-07-27
    • 1970-01-01
    • 2015-03-27
    • 2010-12-17
    • 2019-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多