在oracle中,有个字符串 'YE R: H900019 review #24.#25 ok.pls handle(2024/7/01/10:43)' ,用regexp_substr 函数,分别取出'H900019','#24.#25','2024/7/01/10:43',正则表达式怎么写('#24.#25'中 的个数是不固定的,可能是'#01',也可能是'#01.#03.#04.#24.#25',最多25个)?或者说还有其他好的方法吗?
35条回答 默认 最新
关注 获得4.00元问题酬金 🕗晚上好,题主!目前:🟢[在线]
📢参考通义千问、由郭老师整理提供!
📣今日诗号:浮生寄墟丘,不与红尘谋,身披烟波立云舟。一扇擎青穹,飘洒翳孤踪,梦变鲲鹏振长空。Oracle 正则表达式提取字符串
以下是使用
regexp_substr
函数提取所需字符串的解决方案:-- 测试字符串 WITH test_data AS ( SELECT 'YE R: H900019 review #24.#25 ok.pls handle(2024/7/01/10:43)' AS str FROM dual ) -- 从测试数据中提取信息 SELECT str, regexp_substr(str, 'H\d+', 1, 1) AS code, regexp_substr(str, '(#\d+\.?){1,25}', 1, 1) AS review_numbers, regexp_substr(str, '\(\d{4}/\d{1,2}/\d{1,2}/\d{1,2}:\d{1,2}\)', 1, 1) AS date_time FROM test_data;
代码解释:
WITH test_data AS (...)
: 创建一个名为test_data
的公用表表达式 (CTE),其中包含你的测试字符串。regexp_substr(str, 'H\d+', 1, 1) AS code
:regexp_substr
: 用于在字符串中查找匹配正则表达式的子字符串。str
: 要搜索的字符串。'H\d+'
: 正则表达式,匹配以 "H" 开头后跟一个或多个数字的字符串。1
: 指定从字符串的第一个字符开始搜索。1
: 返回第一个匹配项。
regexp_substr(str, '(#\d+\.?){1,25}', 1, 1) AS review_numbers
:'(#\d+\.?){1,25}'
: 正则表达式,匹配以 "#" 开头,后跟一个或多个数字,可选的句点 ".",重复出现 1 到 25 次的字符串。
regexp_substr(str, '\(\d{4}/\d{1,2}/\d{1,2}/\d{1,2}:\d{1,2}\)', 1, 1) AS date_time
:'\(\d{4}/\d{1,2}/\d{1,2}/\d{1,2}:\d{1,2}\)'
: 正则表达式,匹配格式为 "(YYYY/MM/DD/HH:MM)" 的日期时间字符串。
输出结果:
| str | code | review_numbers | date_time | |---------------------------------------------------------------------|----------|----------------|----------------------| | YE R: H900019 review #24.#25 ok.pls handle(2024/7/01/10:43) | H900019 | #24.#25 | (2024/7/01/10:43) |
注意:
- 上述代码中的正则表达式可以根据你的实际需求进行调整。
- 如果你使用的是 Oracle 10g 或更早版本,则不支持
WITH
子句,你需要将测试数据直接写入FROM
子句中。
解决 1无用
悬赏问题
- ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
- ¥20 关于web前端如何播放二次加密m3u8视频的问题
- ¥20 spring boot集成mqtt的使用问题
- ¥15 使用百度地图api 位置函数报错?
- ¥15 metamask如何添加TRON自定义网络
- ¥66 关于川崎机器人调速问题
- ¥15 winFrom界面无法打开
- ¥30 crossover21 ARM64版本安装软件问题
- ¥15 mymetaobjecthandler没有进入
- ¥15 mmo能不能做客户端怪物