我正在尝试使用自定义正则表达式清理转换(找到的信息here)从混合地址列(地址3)中提取邮政编码并将其移至新列(邮政编码)
传入数据的示例:
Address3: "London W12 9LZ"
传入数据可以是地名与开头,中间或结尾(或根本不是)的邮政编码的任意组合。
期望的结果:
Address3: "London"
Post Code: "W12 9LZ"
基本上,用简单的英语,“将从地址3找到的任何邮政编码移动(不复制)到邮政编码”。
我的正则表达式技巧并不出色但是我已经设法提取邮政编码并使用以下正则表达到自己的列,从地址3匹配并替换为邮政编码:
匹配表达式:
(?<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 regex实现。
感谢。
答案 0 :(得分:1)
刚刚解决了这个问题。像往常一样,它比我想象的更简单。我没有尝试匹配非后置代码字符串并将它们替换为自己,而是再次添加了与邮政编码匹配的另一行,并将其替换为“”。
总的来说,我有: