Regexp_Replace在Oracle中多次出现具有相同替换次数的字符

时间:2013-04-23 21:36:47

标签: sql regex oracle plsql

我需要一个正则表达式,用字符串中的O替换0,如果它链接到一个字,则只需0。 例如:

R0OSEVELT => ROOSEVELT
100 RO00SEVELT => 100 ROOOSEVELT
0RANGE10 => ORANGE10
PALT00OO = PLATOOOO

2 个答案:

答案 0 :(得分:2)

由于您已使用sql标记了问题,因此这是我可以提出的代码。

REPLACE
   (search_string,
REGEXP_SUBSTR
   (search_string,
    '([[:alpha:]]+|^|[[:space:]])0+([[:alpha:]]+|$|[[:space:]])'
   ),
TRANSLATE
   (REGEXP_SUBSTR
       (search_string,
        '([[:alpha:]]+|^|[[:space:]])0+([[:alpha:]]+|$|[[:space:]])'
       ),
    '0',
    'O'
   )
   )

这是输出。它适用于您的输入案例。也许我错过了其他一些可能性。

R0OSEVELT --> ROOSEVELT
100 RO00SEVELT --> 100 ROOOSEVELT
0RANGE10 --> ORANGE10
PALT00OO --> PALTOOOO
RO00SEVELT 100 --> ROOOSEVELT 100
RANGE10 --> RANGE10
RANGE0 --> RANGEO

答案 1 :(得分:1)

您没有指定单个零站点会发生什么,但是:

sed -E 's/([[:alpha:]])?0([[:alpha:]])/\1O\2/g; s/([[:alpha:]])0([[:alpha:]])?/\10\2/g'

将执行您指定的部分工作。 第一个替换命令用字母“O”替换零,如果它在两个字母字符之间或至少后跟一个字母字符,即单词开头。第二个与单词结尾相同。