模式识别和字符串匹配

时间:2011-09-30 16:23:59

标签: c++ perl

我有两个来自两个不同服务器的文件。在这两个文件中显示了一些足球队的比赛。如你所知,可以用不同的名字来召唤足球队。 我想实现一个代码,可以在两个文件中识别相同的足球比赛,以便从文件中获取相同的变量,从另一个文件中获取其他变量。 例如,在一个文件中,我有一个名为

的匹配项
Derry City - Bray Wanderers

在另一个文件中我有相同的匹配名称

Derry City - Bray 

我该怎么做? 我没有想法。

2 个答案:

答案 0 :(得分:1)

在c ++中:看看Boost.RegexBoost.Tokenizer,因为他们会做你需要的。你需要的只是一个匹配的模式。

boost::regex("Bray[\s]*(Wanderers)?", boost::regex::icase);

或类似的东西 - 易于设置为一组单元测试。

答案 1 :(得分:1)

非常简单的替换团队别名的脚本。你需要自己填充别名,我做了一些。如果您有多个游戏,只要所有别名都交换为全名,哈希就会覆盖现有的游戏。

#!/usr/bin/perl
use strict;
use warnings;

my %games;
while (<DATA>) {
    chomp;
    my ($home, $guest) = split /\s*-\s*/, $_, 2;
    $home  = get_name($home);
    $guest = get_name($guest);
    $games{"$home - $guest"} = 1;
}

sub get_name {
# Return the full name for the team, if it exists, otherwise return the original
    my %alias = (
        'Derry'     => 'Derry City',
        'Brawlers'  => 'Beijing',
        'Dolphins'  => 'Miami',
        'Bray'      => 'Bray Wanderers',
    );
    return $alias{$_[0]} // $_[0];
}

use Data::Dumper;
print Dumper \%games;

__DATA__
Derry City - Bray Wanderers
Derry City - Bray
Brawlers - Dolphins
Beijing - Miami
Miami - Beijing