正则表达式:从地址中提取门牌号

时间:2018-06-25 09:45:59

标签: sql regex teradata

我有以下几种模式:

  1. 13 R 2
  2. 48 B / 5
  3. 42 B
  4. 42B
  5. 303框15
  6. 303 Bte 15
  7. 303 B Bt 15

,并且只希望得到以下结果(因为Box 15,Bte 15是箱号,而我只希望房屋nbr +可能附在房屋号上的字母):

  1. 13 R 2
  2. 48 B / 5
  3. 42 B
  4. 42B
  5. 303
  6. 303
  7. 303 B

使用正则表达式可以吗?我尝试了以下操作:REGEXP_SUBSTR(my_string_variable, '^\d+(\s*\w$)?')。但是,这仅适用于模式3-5,不适用于前2个和最后一个模式。从$中删除regex会错误地“剥离”模式5和6的第一个字母。

我基本上假设如果数字后面的字母超过1个字符,则该字母属于盒号。例如,BTEBoite的法文缩写,表示Box。我知道如果门牌号包含2个字母(例如:11个AA),这可能是无效的,但是我不知道解决方法,因此我认为这种情况很少发生。

1 个答案:

答案 0 :(得分:1)

这将删除:一个空格,后跟一个大写字母,然后至少一个小写字母,然后是一个可选空格,后跟任意数量的数字

RegExp_Replace(house_number, '\s[A-Z][a-z]+\s+\d+$')

请参见regex101.com