0

我有一个字符串:ON P6B 0B8。我需要的输出是:P6B OB8.

我可以用它regexp_substr('ON P6B 0B8','[^ ]+$',1)来获取句子末尾的最后一个单词。但是我如何得到空格后面的单词——从末尾数的第二个单词?

我如何告诉regexp_substr从后面看时不要停在第一个空格,而是继续前进直到它碰到第二个空格?

我很难理解 Oracle regexp 提供的元字符。

4

1 回答 1

0

这是一个正则表达式,它将从您的字符串中获取最后 2 组字符。由于看起来您正在获得加拿大邮政编码,但您可能需要更加小心。

WITH 子句建立一个包含数据的表。请注意,第一行是有效的邮政编码格式,但第二行是错误的(连续 2 个字母)。始终为您的测试用例使用意外数据,您不希望有任何意外,并且数据将始终包含意外。

第一个正则表达式匹配字符串末尾用空格分隔的 2 组 3 个字符。乍一看这似乎没问题,但如果数据不好,它将被返回。要收紧它,请使用第二个正则表达式,它专门检查加拿大邮政编码格式的大写字母数字大写字母字母空格数字大写字母数字,如果找不到则返回 NULL。也许您想通过 NVL() 调用来捕获它并返回一条消息。

with tbl(str) as (
  select 'Windsor ON P6B 0B8' from dual union all
  select 'Windsor_bad_postcode ON A3C 9BB' from dual
)
select --regexp_substr(str, '.* (.{3} .{3})$', 1, 1, NULL, 1) postcode_w_bad
       regexp_substr(str, '.* ([A-Z]\d[A-Z] \d[A-Z]\d)$', 1, 1, NULL, 1) postcode
from tbl; 
于 2017-12-01T16:10:52.500 回答