Regexp_substr 上的 Oracle 查询

Oracle Query on Regexp_substr

我正在尝试使用 Regexp_substr 从 属性 字段中提取单元号。 下面是查询。

regexp_substr(PROPERTY,'(#)[^\S]+ ')

虽然有些结果是正确的,但其他人返回如下:

#05-08 DOVER PARKVIEW

我可以知道我需要做什么才能省略所有字母或单词吗? 谢谢。

[^\S] 模式匹配任何字符,但 \ 和大写字母 S.

您需要在 - 之后捕获 1+ 位数字,在 # 之后再次捕获 1+ 位数字,然后仅使用

提取匹配的那部分
regexp_substr(PROPERTY, '#(\d+-\d+)', 1, 1, NULL, 1)

最后一个 1 参数告诉正则表达式引擎提取 ID 为 1 的捕获组的内容(它是模式中唯一的捕获组)。

  • # - 文字 #
  • (\d+-\d+) - 捕获组 1 匹配:
    • \d+ - 1 个或多个数字
    • - - 一个连字符
    • \d+ - 1 个或多个数字。

参见 online demo:

select regexp_substr('#05-08 DOVER PARKVIEW', '#(\d+-\d+)', 1, 1, NULL, 1) as RESULT from dual