我有这样的值(value)观: aaa_1、bb_5、c_21、a_b。 现在我需要从此值中删除尾随下划线和数字。 A_b (string_string) 是有效值,不需要删除。基本上,我需要正则表达式模式来从字符串中仅提取尾随 _[任意数量的数字]。
我使用的是 Oracle 11gR2
有什么建议吗?
最佳答案
您需要将 REGEXP_REPLACE 与正则表达式 '\_[[:digit:]]{1,}' 结合使用
这会转换为查找(转义的)下划线及其后的一位或多位数字:
例如
SELECT REGEXP_REPLACE('a_b', '\_[[:digit:]]{1,}'),
REGEXP_REPLACE('aaa_1', '\_[[:digit:]]{1,}'),
REGEXP_REPLACE('c_21', '\_[[:digit:]]{1,}'),
REGEXP_REPLACE('bb_5', '\_[[:digit:]]{1,}')
FROM dual;
返回
a_b
aaa
c
bb
如果您想确保仅在没有字母字符时删除下划线和数字,请将 $ 添加到正则表达式字符串的末尾以表示字符串的结尾。
例如第一个有“$”第二个没有
SELECT REGEXP_REPLACE('bb_5b', '\_[[:digit:]]{1,}$'),
REGEXP_REPLACE('bb_5b', '\_[[:digit:]]{1,}'),
REGEXP_REPLACE('bb_55', '\_[[:digit:]]{1,}$'),
REGEXP_REPLACE('bb_55', '\_[[:digit:]]{1,}')
FROM dual;
返回
bb_5b
bbb
bb
bb
正则表达式可能很尴尬,但此链接是我发现的 Oracle 正则表达式最容易理解的链接之一: http://www.dba-oracle.com/t_regular_expressions.htm
希望这有帮助。
关于regex - Oracle regexp - 从字符串中删除尾随下划线和数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7333606/