正则表达式匹配精确的数字长度

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'无法再次参与以允许在第二个数字对上进行匹配。