在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无用