首页 > 解决方案 > Perl - 截断值重叠和连接的位置

问题描述

我是 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   ║
╚═══╩══════════════════════════════════════╝

此时我将两个地址拉入并存储它们,但现在我需要将它们转换为单个“完整”地址。

有人可以帮我解决吗?

谢谢

标签: mysqlregexperlconcatenationtruncate

解决方案


您可以从一个正则表达式开始,它将第一个数据条目 ( 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;

在你完成之后,你应该非常接近你所要求的。

注意:语法错误可能是可能的,我已经把它写在了我的脑海中。


推荐阅读