求一个替换字符串的正则表达式01!01.01!01.01.01变成01.02!01.02.01!01.02.01.01

kmonkey 2014-08-25 04:12:12
数据是这个形式的01!01.01!01.01.01
现在要求把每个!号之间的字符串的第一个01替换成01.02
替换后的格式如下01.02!01.02.01!01.02.01.01
...全文
224 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
bw555 2014-08-25
  • 打赏
  • 举报
回复
6#方法不错,把开头01和!后面的01情况综合起来了 如果能确定每段都是以01开头的话,这方法估计是最简洁的写法了
CT_LXL 2014-08-25
  • 打赏
  • 举报
回复
引用 1 楼 kmonkey 的回复:
注意这个01!01.01!01.01.01是动态,可能是01!01.01!01.01.01!01.01.01.01,可能还更长
SELECT REGEXP_REPLACE('01!01.01!01.01.01','(^01|!01)','\1.02') FROM DUAL;
bw555 2014-08-25
  • 打赏
  • 举报
回复
引用 4 楼 wildwave 的回复:
如果!后紧跟着就是01就好办了,那样的话不需要正则 substr(replace('!'||字段名,'!01','!01.02'),2)
恩,确实,如果是这样就简单了 不过要特别注意第一个01前面没有叹号,需要特殊处理下
小灰狼W 2014-08-25
  • 打赏
  • 举报
回复
如果!后紧跟着就是01就好办了,那样的话不需要正则 substr(replace('!'||字段名,'!01','!01.02'),2)
bw555 2014-08-25
  • 打赏
  • 举报
回复
测试结果
STR
01.02!01.02.01!01.02.01.01
bw555 2014-08-25
  • 打赏
  • 举报
回复
利用!拆分,分别处理,然后再进行合并

select replace(
  wmsys.wm_concat(substr(str,1,instr(str,'01')-1)||'01.02'||substr(str,instr(str,'01')+2))
  ,',','!') str
from
  (select REGEXP_SUBSTR('01!01.01!01.01.01', '[^!]+', 1, LEVEL) STR
  from dual
  CONNECT BY LEVEL <= REGEXP_COUNT('01!01.01!01.01.01', '!') + 1)
kmonkey 2014-08-25
  • 打赏
  • 举报
回复
注意这个01!01.01!01.01.01是动态,可能是01!01.01!01.01.01!01.01.01.01,可能还更长

17,082

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧