Perl-截断值重叠和连接的地方

时间:2019-06-17 13:15:56

标签: mysql regex perl concatenation truncate

我是Perl语言的新手,正在尝试从MYSQL数据库转换一些数据。

我正在从两个不同的表中提取地址,我的目标是连接一个“完整”地址。在某些情况下,地址分散在每个表的列之间。

例如:

╔═══╦═════════════════════╦══════════════════════╗
║   ║ a.address_1         ║ b.address_2          ║
╠═══╬═════════════════════╬══════════════════════╣
║ 1 ║ 6418 Main St        ║ Main St, Detroit MI  ║
║ 2 ║ 11 S Pole Rd        ║ Miami, FL 33166      ║
║ 3 ║ Pittsburgh, PA 15222║ Third Ave, Pittsburgh║
╚═══╩═════════════════════╩══════════════════════╝

我需要检查地址的任何部分是否匹配,如果是,则截断重叠部分并连接剩余的地址

╔═══╦══════════════════════════════════════╗
║   ║ address                              ║
╠═══╬══════════════════════════════════════╣
║ 1 ║ 6418 Main St, Detroit MI             ║
║ 2 ║ 11 S Pole Rd Miami, FL 33166         ║
║ 3 ║ Fifth Avenue, Pittsburgh, PA 15222   ║
╚═══╩══════════════════════════════════════╝

这时,我要提取两个地址并将其存储,但是现在我需要将它们转换为一个“完整”地址。

有人可以帮助我解决问题吗?

谢谢

1 个答案:

答案 0 :(得分:0)

您可以从一个正则表达式开始,该正则表达式将第一个数据条目(a.address_1)的每个单词分成一个数组:

my ($addr_1, $addr_2) = $sth->fetchrow_array();
my @words = ($addr_1 =~ /(.*?)\s+/g);

之后,您可以遍历每个单词并将其从第二个地址中删除

for my $word (@words) {
    $addr_2 =~ s/$word//g;
}

完成后,基本上可以将两个字符串合并为一个:

my $concatenated_string = $addr_1 . $addr_2;

完成后,您应该非常接近所要询问的内容。

注意:可能会出现语法错误,我已将其写在了脑海中。