Oracle regexp_replace 字母数字
Oracle regexp_replace numbers for letters
我认为这应该很简单,但除了嵌套 regexp_replace
,我似乎想不出其他方法来做到这一点。我想用相应的字母替换每个数字,例如:
regexp_replace(regexp_replace(regexp_replace('147','1','A'),'4','D'),'7','G')
结果:
ADG
但使用这样的列表运算符
regexp_replace('12345','[1234567890]','[ABCDEFGHIJ]')
当然我得到的不是 ADG
[ABCDEFGHIJ][ABCDEFGHIJ][ABCDEFGHIJ][ABCDEFGHIJ][ABCDEFGHIJ]
为此您不需要正则表达式;您需要翻译功能:
select translate('147', '1234567890', 'ABCDEFGHIJ') as translated from dual;
TRANSLATED
-------------
ADG
用 REGEXP_REPLACE
不容易做到这一点。
正则表达式并没有真正的能力根据匹配的内容来决定替换什么;它通常只是为了使 a 匹配,剩下的由您使用的任何编程语言决定。您也许可以用 Python 之类的方式来解决这个问题,但正如另一个答案中指出的那样,对于 Oracle,REGEXP_REPLACE
是不适合这项工作的工具。
我认为这应该很简单,但除了嵌套 regexp_replace
,我似乎想不出其他方法来做到这一点。我想用相应的字母替换每个数字,例如:
regexp_replace(regexp_replace(regexp_replace('147','1','A'),'4','D'),'7','G')
结果:
ADG
但使用这样的列表运算符
regexp_replace('12345','[1234567890]','[ABCDEFGHIJ]')
当然我得到的不是 ADG
[ABCDEFGHIJ][ABCDEFGHIJ][ABCDEFGHIJ][ABCDEFGHIJ][ABCDEFGHIJ]
为此您不需要正则表达式;您需要翻译功能:
select translate('147', '1234567890', 'ABCDEFGHIJ') as translated from dual;
TRANSLATED
-------------
ADG
用 REGEXP_REPLACE
不容易做到这一点。
正则表达式并没有真正的能力根据匹配的内容来决定替换什么;它通常只是为了使 a 匹配,剩下的由您使用的任何编程语言决定。您也许可以用 Python 之类的方式来解决这个问题,但正如另一个答案中指出的那样,对于 Oracle,REGEXP_REPLACE
是不适合这项工作的工具。