regex - Oracle regex_replace 不排除某些值
问题描述
我有一个带有 regex_replace 的选择语句。
SELECT REGEXP_REPLACE((REGEXP_REPLACE(nvl(d.text_i, d.text),'[^=|]+(\||$)')),'^'||24466||'=|\|'
||24466||'=', '||'||24466||'='||'C1')
FROM table_infor d
where d.tab_id = 13095;
列 text_i 和 text 的 I 值如下
text text_i
26736=A||||24470=B1||||24467=||||24466=V1 (null)
26736,24470,24467,24466 (null)
26736=A||||24470=||||24467=||||24466=V1 (null)
26736=||||24470=B1||||24467=B||||24466=V1 (null)
(null) A
123 (null)
所以我想打印这个:
26736=||||||24470=||||||24467=|||||||24466=C1
2673,24470,24467,24466
26736=||||24470=||||24467=||||24466=C1
26736=||||24470=||||24467=||||24466=C1
A
123
但我目前得到的是
26736=||||||24470=||||||24467=|||||||24466=C1
(null)
26736=||||24470=||||24467=||||24466=C1
26736=||||24470=||||24467=||||24466=C1
所以我的 regexp_replace 逻辑适用于所有具有 =||||| 的值 有效,但对于其他值,它没有选择它们。我希望按原样选择其他值。
解决方案
该'[^=|]+(\||$)'
模式匹配除 a 之外的任何一个或多个字符=
,|
直到字符串的 a|
或结尾,如果存在则使用管道。这意味着,比赛将尽快开始。您希望仅在出现=
符号时才开始匹配。
因此,将其包含在第一个正则表达式中并替换为=
以将其放回:
REGEXP_REPLACE(nvl(d.text_i, d.text),'=[^=|]+(\||$)', '=')
请参阅此正则表达式演示。
推荐阅读
- python - tf.group 和 tensorflow 集合有什么不同?
- c# - 临时更改一个值(文本颜色)并在一些操作后恢复它(打印文本)
- string - 在字符串上使用范围时发生类型不一致
- javascript - 如何从猫鼬的另一个集合中计算文档?
- javascript - 模态窗口应该每天只为每位访客打开一次
- python - 高学习率使模型训练失败
- javascript - 以“安全”的方式嵌入其他网站
- kubernetes - 将 cni 插件从 flannel 切换到 calico 然后 flannel 后 Pod 无法启动
- python - Python - UnicodeEncodeError:'ascii'编解码器无法编码位置 42-43 中的字符:序数不在范围内(128)
- javascript - react-native run-ios 需要很长时间才能构建,有时永远不会