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

Regex: extracting a house number from an address

我有以下模式:

  1. 13 转 2
  2. 48 B / 5
  3. 42乙
  4. 42B
  5. 303 箱 15
  6. 303 Bte 15
  7. 303 B BT 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 中删除 $ 会错误地 'strip' 模式 5 和 6 的第一个字母。

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

这将删除:a space 后跟一个大写字母后跟至少一个小写字母后跟可选的 space 后跟任意数字:

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

regex101.com