模式识别和字符串匹配
pattern recognition and string matching
我从两个不同的服务器上获取了两个文件。在这两份文件中介绍了一些足球队的比赛。如你所知,足球队可以用不同的名字来称呼。我想实现一个代码,可以识别相同的足球比赛在两个文件,以便采取相同的变量从一个文件和其他一些从其他文件。例如,在一个文件中,我有一个匹配名为
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);
或者类似的东西——很容易设置为一组单元测试。
相关文章:
- 找到具有最多子串栅栏的字符串排列
- std::regex:匹配由数字和空格组成的字符串,并提取数字.如何?
- 我的求解(字符串 a、字符串 b)的输出与随机哈希中的预期输出不匹配
- 打印所有最长匹配的子字符串
- 需要忽略日期/序列号,但匹配字符串其余部分的正则表达式
- 正则表达式匹配字符串之间的数字
- 如何在 qt 中使用 QRegularExpression 匹配字符串开头的空格?
- 用Osttream语法双串到字符串
- qt中的正则是不匹配字符串
- Regex_replace两次匹配字符串的结尾
- 使用正则表达式匹配字符串
- 基于匹配字符串模式来简化函数
- C++ :为什么正则表达式模式"[+-/*]"匹配字符串"."?
- 从Arduino到处理的完整串行字符串
- 匹配字符串长度;查找和替换;在c++中删除HTML标签
- 匹配字符串的正则表达式,该字符串以与开头相同的序列结束
- 在输入流的开头匹配字符串
- c++在文件中匹配字符串并获得行号
- Std::regex,匹配字符串的开始/结束
- 使用Boost Spirit匹配字符串