模式识别和字符串匹配

pattern recognition and string matching

本文关键字:串匹配 字符串 字符 模式识别      更新时间:2023-10-16

我从两个不同的服务器上获取了两个文件。在这两份文件中介绍了一些足球队的比赛。如你所知,足球队可以用不同的名字来称呼。我想实现一个代码,可以识别相同的足球比赛在两个文件,以便采取相同的变量从一个文件和其他一些从其他文件。例如,在一个文件中,我有一个匹配名为

Derry City - Bray Wanderers

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

Derry City - Bray 

我该怎么做?我不知道。

非常简单的替换团队别名的脚本。你得自己编个化名,我编的。如果你有多个游戏,哈希会覆盖现有的游戏,只要所有的别名都换成全名。

#!/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

在c++中:看看Boost。正则表达式和Boost。Tokenizer,因为它们会做你需要的。你所需要的只是一个匹配的模式。

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

或者类似的东西——很容易设置为一组单元测试。