正则表达式匹配精确的数字长度
Regular Expression Match exact length of digits
我想替换字符串中 精确 数量的连续数字,这意味着我不希望它替换较长数字序列的一部分。
例如:
select regexp_replace('filename07_20160723', '[0-9]{2}', '') from dual
returns
filename_
但我想要它 return
filename_20160723
如何只替换单独的 '07'
(两边都是非数字字符)?
因为 oracle 不支持环顾四周,要完全替换 2 位数字(两边都没有数字),捕获两边的非数字并将它们放回去:
regexp_replace('filename07_20160723', '(\D)\d\d(\D)', '')
注意:由于@mathguy points out,双方的非数字字符都被消耗掉了,所以不能再参加比赛了。这具有以下效果:
x33y44z -> xy44z not xyz
因为'y'
无法再次参与以允许在第二个数字对上进行匹配。
我想替换字符串中 精确 数量的连续数字,这意味着我不希望它替换较长数字序列的一部分。
例如:
select regexp_replace('filename07_20160723', '[0-9]{2}', '') from dual
returns
filename_
但我想要它 return
filename_20160723
如何只替换单独的 '07'
(两边都是非数字字符)?
因为 oracle 不支持环顾四周,要完全替换 2 位数字(两边都没有数字),捕获两边的非数字并将它们放回去:
regexp_replace('filename07_20160723', '(\D)\d\d(\D)', '')
注意:由于@mathguy points out,双方的非数字字符都被消耗掉了,所以不能再参加比赛了。这具有以下效果:
x33y44z -> xy44z not xyz
因为'y'
无法再次参与以允许在第二个数字对上进行匹配。