删除标点符号Perl

时间:2013-03-19 13:51:10

标签: regex perl punctuation

Hye ..如何删除标点?实际上我已经尝试使用[:punct:]但它并不适用于所有标点符号。它只是仅删除点. ...但其他标点仍然有。我的任务是删除段落,删除标点符号并将所有文本更改为小写..

这是我的文本文件,即snuker.txt

snuker berjaya menarik perhatian kbs.
19981230

Sam Chong"" kiri dan ooi Chin Kay memberi sumbangan besar kepada pembangunan snuker tanah air 
dengan merangkul pingat' emas sukan asia ti'ga belas tahun sembi'lan belas sembilan puluh lapan membuka 
lembaran baru snuker dan biliard tanah air apabila mereka kian disegani dan berjaya menukar tanggapan. 
negatif masyarakat tempatan terhadap sukan itu

这是我的perl脚本

#!/usr/bin/perl

use utf8;

if(! open(INPUT, '< snuker.txt'))
{
die "cannot opent input file: $!";
}


if(! open(OUTPUT, '> output.txt'))
{
    die "cannot open output file: $!";
}

select OUTPUT;

while($lines = <INPUT>)
{

    if($lines =~ s/[\s[:punct:]]+$/ /g)
    {
        print "$lines";
    }
}

close INPUT;
close OUTPUT;
close STDOUT;

输出是这样的...其他标点符号仍然只有.已经消失了..

snuker berjaya menarik perhatian kbs 19981230  Sam Chong"" kiri dan ooi Chin Kay memberi sumbangan besar kepada pembangunan snuker tanah air dengan merangkul pingat' emas sukan asia ti'ga belas tahun sembi'lan belas sembilan puluh lapan membuka lembaran baru snuker dan biliard tanah air apabila mereka kian disegani dan berjaya menukar tanggapan negatif masyarakat tempatan terhadap sukan itu 

3 个答案:

答案 0 :(得分:6)

从正则表达式中删除美元符号。它使您的模式仅在一行的末尾匹配。

答案 1 :(得分:0)

尝试这样做:

#!/usr/bin/perl

use strict; use warnings;

$/ = ""; # read file per paragraphs

while (<>) {
    s/\p{Punct}//g;
    s/(?:\n|\s+)/ /g;
    print lc($_);
}

用法

perl script.pl < test_file >  output.txt

输出

  

snuker berjaya menarik perhatian kbs 19981230 sam chong kiri dan ooi chin kay memberi sumbangan besar kepada pembangunan snuker tanah air dengan merangkul pingat emas sukan asia tiga belas tahun sembilan belas sembilan puluh lapan membuka lembaran baru snuker dan biliard tanah air apabila mereka kian disegani dan berjaya menukar tanggapan negatif masyarakat tempatan terhadap sukan itu

答案 2 :(得分:0)

#!/usr/bin/perl

use utf8;

if(! open(INPUT, '< test_file'))
{
    die "cannot opent input file: $!";
}

if(! open(OUTPUT, '> output.txt'))
{
    die "cannot open output file: $!";
}

select OUTPUT;

while($lines = <INPUT>)
{
    $lines =~ s/\n/ /g;
    $lines =~ s/[[:punct:]]//g;
    print lc("$lines");
}

close INPUT;
close OUTPUT;
close STDOUT;