美文网首页
正则案例三:匹配3个及以上连续数字并输出

正则案例三:匹配3个及以上连续数字并输出

作者: 只是甲 | 来源:发表于2021-06-22 10:46 被阅读0次

一.需求描述

 今天朋友咨询一个正则的需求,对于连续超过3个数字进行输出,如果有多个连续数字,都需要输出。
 例如 123abc1234 输出为 123.1234,中间用'.'进行分隔。

二.解决方案

2.1 Oracle解决方案

看到这个需求,首先想到的是使用Oracle 正则表达式的regexp_replace函数了。

多个匹配表达式用()进行关联,例如(.*?)([0-9]{3,})
其中 *? 是匹配0次或多次,非贪婪模式。
[0-9]{3,} 是匹配连续3个及以上数字。

代码:

with tmp1 as
(
select 'abc12' str from dual
union 
select 'abc123' str from dual  -- OK 
union
select '1234abc333' str from dual
)
select regexp_replace(str,'(.*?)([0-9]{3,})(.*?)', '\2.') str_new
   from tmp1
     where regexp_like(str,'[0-9]{3}')

测试记录:

SQL> with tmp1 as
  2  (
  3  select 'abc12' str from dual
  4  union
  5  select 'abc123' str from dual  -- OK
  6  union
  7  select '1234abc333' str from dual
  8  )
  9  select regexp_replace(str,'(.*?)([0-9]{3,})(.*?)', '\2.') str_new
 10     from tmp1
 11       where regexp_like(str,'[0-9]{3}')
 12  /
STR_NEW
--------------------------------------------------------------------------------
1234.333.
123.

2.2 MySQL 解决方案

 用MySQL 8.0版本进行测试,发现MySQL不支持()这种集合的方式,我找到了一种更为简便的解决方案,使用regexp_replace函数。

代码:

with tmp1 as
(
select 'abc12' str from dual
union 
select 'abc123' str from dual  -- OK 
union
select '1234abc333' str from dual
)
select regexp_replace(str,'[^0-9]{1,}', '.') str_new
   from tmp1
     where regexp_like(str,'[0-9]{3}')

测试记录:

mysql> with tmp1 as
    -> (
    -> select 'abc12' str from dual
    -> union
    -> select 'abc123' str from dual  -- OK
    -> union
    -> select '1234abc333' str from dual
    -> )
    -> select regexp_replace(str,'[^0-9]{1,}', '.') str_new
    ->    from tmp1
    ->      where regexp_like(str,'[0-9]{3}')
    -> ;
+----------+
| str_new  |
+----------+
| .123     |
| 1234.333 |
+----------+
2 rows in set (0.00 sec)

相关文章

  • 正则案例三:匹配3个及以上连续数字并输出

    一.需求描述  今天朋友咨询一个正则的需求,对于连续超过3个数字进行输出,如果有多个连续数字,都需要输出。 例如 ...

  • 正则的简单用法(python)

    正则(python) \d 匹配数字* 匹配0个或0个以上+ 匹配1个或1个以上{n} 匹配n个 字符分类 \d ...

  • re正则表达式

    正则表达式 \w 匹配字母数字及下划线的字符 \w 匹配额不是字母、数字、下划线字符 \s 匹配任...

  • 一些正则

    简单手机号 数字+字母组成6位以上 邮箱 连续数字或字母正则获取 (abc, cba, 123, 321) 连续相...

  • 2020-05-26 学习python爬虫系列(三):正则表达式

    正则表达式 常见匹配模式 模式描述\w匹配字母数字及下划线\W匹配非字母数字下划线\s匹配任意空白字符,等价于 [...

  • iOS 正则表达式判断输入的内容

    //检查固定话 //6为数字密码 //正则匹配手机号 //正则匹配用户密码6-16位数字和字母组合 //正则匹配用...

  • 三级等保的iOS端正则验证规则

    //匹配中级以上强度密码正则表达式,要求数字、字母、特殊字符~@#$^任意两种组合以上 - (BOOL)pas...

  • 正则表达式入门

    正则表达式 note\d:匹配数字[0-9]:匹配数字(字符组),在[]中对数字进行限定\D:匹配任意一个非数字字...

  • re模块复习

    正则表达式 字符规则 贪婪匹配. : 除换行外任意字符\d:匹配数字[0-9]\D:匹配非数字\w:匹配单词字符(...

  • 正则表达式

    正则表达式 字符规则 贪婪匹配. : 除换行外任意字符\d:匹配数字[0-9]\D:匹配非数字\w:匹配单词字符(...

网友评论

      本文标题:正则案例三:匹配3个及以上连续数字并输出

      本文链接:https://www.haomeiwen.com/subject/nfvpyltx.html