sql - 多个正则表达式不使用级别
问题描述
我想将字符串一一分开并成为行。我查询它只得到算术运算符而不是数字
SELECT
REGEXP_SUBSTR('141*47+2/5','[^0-9]+| [0-9]+',1,LEVEL) AS FORMULA
FROM DUAL
CONNECT BY REGEXP_SUBSTR ('141*47+2/5','[^0-9]+| [0-9]+',1,LEVEL) IS NOT NULL
输入
141*47+2/5
结果 :
*
--
+
--
/
我的期望:
141
--
*
--
47
---
+
--
2
--
/
--
5
解决方案
这是一种方法:
WITH sample_data AS (SELECT '141*47+2/5' str FROM dual UNION ALL
SELECT '100*(10 + 2)' str FROM dual UNION ALL
SELECT '-1*5+2/6' str FROM dual UNION ALL
SELECT '(10+2)*5' str FROM dual)
SELECT str,
regexp_substr(str, '([[:digit:]]+|[\*/+-\(\)]{1})', 1, LEVEL) sub_str
FROM sample_data
CONNECT BY regexp_substr(str, '([[:digit:]]+|[\*/+-\(\)]{1})', 1, LEVEL) IS NOT NULL
AND PRIOR str = str
AND PRIOR sys_guid() IS NOT NULL;
STR SUB_STR
------------ ------------
(10+2)*5 (
(10+2)*5 10
(10+2)*5 +
(10+2)*5 2
(10+2)*5 )
(10+2)*5 *
(10+2)*5 5
-1*5+2/6 -
-1*5+2/6 1
-1*5+2/6 *
-1*5+2/6 5
-1*5+2/6 +
-1*5+2/6 2
-1*5+2/6 /
-1*5+2/6 6
100*(10 + 2) 100
100*(10 + 2) *
100*(10 + 2) (
100*(10 + 2) 10
100*(10 + 2) +
100*(10 + 2) 2
100*(10 + 2) )
141*47+2/5 141
141*47+2/5 *
141*47+2/5 47
141*47+2/5 +
141*47+2/5 2
141*47+2/5 /
141*47+2/5 5
注意我没有考虑科学格式的数字(例如 1.3e+2、2.6e-5),并且我假设负数应该在单独的行上有减号。
推荐阅读
- flutter - 是否可以在不将其包装在容器中的情况下为 Scaffold 背景提供渐变颜色?
- ios - LazyHStack (SwiftUI) 是否为屏幕外的视图释放内存?
- laravel - Laravel Backpack select2_from_ajax 传递多个或额外的搜索关键字进行搜索
- plot - 下限继续密度图 seaborn
- javascript - 怎么做
从顶部开始 在 Vuetify 中? - reactjs - 道具未在屏幕上显示某些内容
- javascript - 如何在 K6 工具上一次为每个场景生成摘要报告?
- c# - 无法连接到远程服务器 asp.net IIS
- java - 使用 Java 流的学生的平均分
- python - 我收到第 4 行的 ValueError