perl:多次匹配文本文件中数组的多字正则表达式项

时间:2013-10-08 09:03:37

标签: regex arrays perl hash

我想多次将多字符串项(存储在数组中)作为正则表达式匹配在文本文件中。我还想创建一个散列,其中匹配的项目作为键,出现的次数作为其值(理想情况下按值排序)。以下是我到目前为止的情况:

读入要匹配项目的文本文件:

open(FILE, "<file.txt") or die "cannot open file for reading: $!";
local $/ = undef;
my $inputfile = <FILE>;
close FILE;

循环遍历多字数组,将每个项目转换为正则表达式,然后匹配$inputfile中的正则表达式并创建出现的哈希值:

foreach my $mwe (@mwelist) {
    my $mweregex = quotemeta($mwe);
    foreach ($inputfile =~ /($mweregex)/g) {
        #print STDOUT "$1\n\n";
        $mweinputfile{$mwe}++;
    }
}

@mwelist是一个包含字符串项的数组,每个字符串都包含两个或更多单词。

现在代码无效 - 如果我取消注释打印命令,它只会在shell中给我空行(只是空行,没有空格)。

感谢任何指针/更正/建议,

以下是输入数据的示例行(上面的file.txt):

  

Sehr geehrterHerrGeißler,meine sehr geehrten Damen und Herren nicht nur hier im Saal sondern auch an den Bildschirmen! WirmöchtegerndieDiskussionüberdieSchnellfahrstrecke Wendlingen-Ulm - undHerrGeißler,um auchdafürKlarheitzu sorgen:Wenn wir von Neubaustrecke oder Schnellfahrstrecke reden,meinen wir dasselbe - dieseDiskussionmöchteichmiteinemÜberblickstartnen,derSiedarüberinformiert, warum wir diese Schnellfahrstrecke vorsehen,is der verkehrliche Vorteil und der verkehrliche Nutzen ist,unddarüberhinausnatürlichsolleinÜberblickgegebenwerden,warum sie genau so geplantundausgeführtwird,wie sie hier dargestellt ist。

以下是@mwelist的一些示例:

  

...

     

在gewissem Sinne

     

在gewissenFällen

     

gewißnicht

     

dasweißichganzgewiß

     

...

1 个答案:

答案 0 :(得分:1)

好的 - 所以我改变了一些东西,希望能更好地解决这个问题。

我尝试了你想要在原始文件中匹配的单词,并且没有发现任何事件,所以我随机穿插它们来提供一些输出:

#!/usr/bin/perl
use warnings;
use strict;
use Data::Dumper;

my $file1 =("in gewissem Sinne Herr Geißler, in gewissen Fällen geehrten Damen in gewissen Fällen nicht nur hier im Saal sondern auch an den Bildschirmen! Wir möchte gern die Diskussion über die Schnellfahrstrecke Wendlingen-Ulm – und Herr Geißler, um auch da für Klarheit zu sorgen: Wenn wir in gewissen Fällen oder Schnellfahrstrecke reden, meinen wir dasselbe – diese Diskussion gewiß nicht einem Überblick beginnen, in gewissen Fällen informiert, warum wir diese in gewissen Fällen vorsehen, was der verkehrliche Vorteil und der verkehrliche Nutzen ist, und darüber hinaus natürlich soll ein Überblick gegeben werden, warum sie genau so geplant und ausgeführt wird, wie sie hier gewiß nicht");

# my @input1 = split('\s+', $file1);
# print Dumper \@input1;
my @input2 =('in gewissem Sinne', 'in gewissen Fällen', 'gewiß nicht', 'das weiß ich ganz gewiß');
# my @input2 = split('\s+', $file2);

my %hash;
foreach my $line (@input2){
    while ($file1 =~ m/$line/g){
    $hash{$line}++;
    }       
}

print Dumper \%hash;

输出:

$VAR1 = {
          'gewiß nicht' => 2,
          'in gewissem Sinne' => 1,
          'in gewissen Fällen' => 5
        };