正则表达式:从地址中提取门牌号
Regex: extracting a house number from an address
我有以下模式:
- 13 转 2
- 48 B / 5
- 42乙
- 42B
- 303 箱 15
- 303 Bte 15
- 303 B BT 15
并且只想得到以下结果(因为 Box 15、Bte 15 是框号,我只想要房子 nbr + 可能是门牌号所附的字母):
- 13 转 2
- 48 B / 5
- 42乙
- 42B
- 303
- 303
- 303乙
这可以使用正则表达式吗?我尝试了以下方法:REGEXP_SUBSTR(my_string_variable, '^\d+(\s*\w$)?')
。然而,这仅适用于模式 3-5,而不适用于前 2 个和最后一个模式。从 regex
中删除 $
会错误地 'strip' 模式 5 和 6 的第一个字母。
我基本上假设如果数字后面的字母超过 1 个字符,则它属于框号。例如,BTE
是 Boite
的法语缩写,意思是 Box
。我意识到如果门牌号有 2 个字母(例如:11 AA),这可能无效,但我不知道解决方案,而且我认为这种情况不会发生太多。
这将删除:a space 后跟一个大写字母后跟至少一个小写字母后跟可选的 space 后跟任意数字:
RegExp_Replace(house_number, '\s[A-Z][a-z]+\s+\d+$')
我有以下模式:
- 13 转 2
- 48 B / 5
- 42乙
- 42B
- 303 箱 15
- 303 Bte 15
- 303 B BT 15
并且只想得到以下结果(因为 Box 15、Bte 15 是框号,我只想要房子 nbr + 可能是门牌号所附的字母):
- 13 转 2
- 48 B / 5
- 42乙
- 42B
- 303
- 303
- 303乙
这可以使用正则表达式吗?我尝试了以下方法:REGEXP_SUBSTR(my_string_variable, '^\d+(\s*\w$)?')
。然而,这仅适用于模式 3-5,而不适用于前 2 个和最后一个模式。从 regex
中删除 $
会错误地 'strip' 模式 5 和 6 的第一个字母。
我基本上假设如果数字后面的字母超过 1 个字符,则它属于框号。例如,BTE
是 Boite
的法语缩写,意思是 Box
。我意识到如果门牌号有 2 个字母(例如:11 AA),这可能无效,但我不知道解决方案,而且我认为这种情况不会发生太多。
这将删除:a space 后跟一个大写字母后跟至少一个小写字母后跟可选的 space 后跟任意数字:
RegExp_Replace(house_number, '\s[A-Z][a-z]+\s+\d+$')