首页 > 解决方案 > 正则表达式:从地址中提取门牌号

问题描述

我有以下模式:

  1. 13 转 2
  2. 48 B / 5
  3. 42乙
  4. 42B
  5. 303 框 15
  6. 303 比特币 15
  7. 303 乙 15

并且只想得到以下结果(因为 Box 15, Bte 15 是箱号,我只想要房子 nbr + 可能是附加到门牌号的字母):

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

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

我基本上假设如果数字后面的字母超过 1 个字符,则它属于箱号。例如,BTE是法语的缩写Boite,意思是Box。我意识到如果门牌号有 2 个字母(例如:11 AA),这可能是无效的,但我不知道解决方案,我认为它不会发生太多。

标签: sqlregexteradata

解决方案


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

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

regex101.com


推荐阅读