regex - Oracle regexp - 从字符串中删除尾随下划线和数字

标签 regex oracle

我有这样的值(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/

相关文章:

regex - 我如何使用TextMate对csv文件的每个值加上双引号?

mysql - oracle查询中如何去除重复记录

sql - 如何将 UNION 与 COUNT 一起使用

c# - 确定正则表达式是否只是文字匹配

java - 在 JAVA 中使用特定模式从字符串中获取子字符串

javascript - 用空格替换单引号和其他符号

javascript - 在 Javascript 中验证用户的 UTF-8 名称

Oracle PIVOT 中 COUNT() 缺失数据

java - Oracle/Mysql编辑记录量大,有推荐吗?

sql - ORACLE 根据两列查找计数