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
我正在尝试使用 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