1

我正在尝试使用自定义正则表达式清理转换(在此处找到信息)从混合地址列(Address3)中提取邮政编码并将其移动到新列(邮政编码)

传入数据示例:

Address3: "London W12 9LZ"

传入的数据可以是地名与开头、中间或结尾(或根本没有)的邮政编码的任意组合。

期望的结果:

Address3: "London"
Post Code: "W12 9LZ"

本质上,用简单的英语,“移动(而不是复制)从 address3 找到的任何邮政编码到邮政编码”。

我的正则表达式技能并不出色,但我已经设法使用以下正则表达式提取邮政编码并将其放入自己的列中,从 Address3 匹配并替换为邮政编码:

匹配表达式:

(?<stringOUT>([A-PR-UWYZa-pr-uwyz]([0-9]{1,2}|([A-HK-Ya-hk-y][0-9]|[A-HK-Ya-hk-y][0-9]     ([0-9]|[ABEHMNPRV-Yabehmnprv-y]))|[0-9][A-HJKS-UWa-hjks-uw])\ {0,1}[0-9][ABD-HJLNP-UW-Zabd-hjlnp-uw-z]{2}|([Gg][Ii][Rr]\ 0[Aa][Aa])|([Ss][Aa][Nn]\ {0,1}[Tt][Aa]1)|([Bb][Ff][Pp][Oo]\ {0,1}([Cc]\/[Oo]\ )?[0-9]{1,4})|(([Aa][Ss][Cc][Nn]|[Bb][Bb][Nn][Dd]|[BFSbfs][Ii][Qq][Qq]|[Pp][Cc][Rr][Nn]|[Ss][Tt][Hh][Ll]|[Tt][Dd][Cc][Uu]|[Tt][Kk][Cc][Aa])\ {0,1}1[Zz][Zz])))

替换表达式:

${stringOUT}

所以这给我留下了:

Address3: "London W12 9LZ"
Post Code: "W12 9LZ"

我的下一个想法是保留上述匹配/替换,然后添加另一个以匹配与上述正则表达式不匹配的任何内容。我认为这可能是一个负面的前瞻性,但我似乎无法让它发挥作用。

我正在使用 SSIS 2008 R2,我认为正则表达式清理转换使用 .net 正则表达式实现。

谢谢。

4

1 回答 1

1

刚刚解决了这个。像往常一样,它的逻辑比我想象的要简单。我没有尝试匹配非邮政编码字符串并将其替换为自己,而是添加了另一行再次匹配邮政编码并将其替换为“”。

所以总的来说,我有:

  1. 使用上述正则表达式匹配邮政编码并将其移动到邮政编码列
  2. 使用上述正则表达式匹配邮政编码,并在 Address3 列中将其替换为“”
于 2012-07-05T15:29:00.123 回答