详情

首页手游攻略 教你用正则表达式提取数字和小数点实用指南

教你用正则表达式提取数字和小数点实用指南

佚名 2026-09-04 20:20:01

平时做技术实践时,很多问题不是概念不会,而是细节没串起来。拿“教你用正则表达式提取数字和小数点”来说,它看着像小点,放到项目里常会牵出环境、配置、兼容性和维护成本。下面按实际采用顺序,把思路、关键写法和容易踩坑的地方讲清楚,便于大家直接对照操作。

目录
  • 1、初识
    • 1.1、纯数字提取
    • 1.2、带有小数点数字提取
  • 2、语法
    • 3、实例代码
      • 4、参考Demo
        • 总结

          1、初识

          1.1、纯数字提取

          -- "提取123abc提取":提取当前字符当中的123
           
          -- 1.Hive:
          select regexp_replace('提取123abc提取','[^0-9]+','') "123"
          select regexp_replace('提取123abc提取','D','') "提取123abc提取"
           
          -- 2.PG: 'g':global,全局替换
          select regexp_replace('提取123abc提取','[^0-9]+','','g' ) "123"
          select regexp_replace('提取123abc提取','D','','g' ) "123"

          1.2、带有小数点数字提取

          -- "提取123.11abc提取":提取当前字符当中的123.11
           
          -- 1.Hive:小数或者整数数据提取
          select regexp_extract('提取123.11abc提取','[0-9]+([.]{1}[0-9]+){0,1}',0) "123.11"
          select regexp_extract('提取123abc提取','[0-9]+([.]{1}[0-9]+){0,1}',0) "123"
           
          -- 2.PG:
          select regexp_replace('提取123.11abc提取','[^d.d]','','g') "123.11"

          2、语法

          字符说明等效于
          将下一字符标记为特殊字符、文本、反向引用或八进制转义符。
          e.g:“n"匹配字符"n”。"n"匹配换行符。序列"\“匹配”","(“匹配”("
          ^匹配输入字符串开始的位置
          $匹配输入字符串结束的位置
          *零次或多次匹配前面的字符或子表达式{0,}
          +一次或多次匹配前面的字符或子表达式{1,}
          ?零次或一次匹配前面的字符或子表达式{0,1}
          {n}n是非负整数。正好匹配n次。
          e.g:"o{2}"与"job"中的"o"不匹配,但与"food"中的两个"o"匹配
          {n,}n是非负整数。至少匹配n次。
          e.g:"o{2,}“不匹配"job"中的"o”,而匹配"fooooood"中的所有o
          "o{1,}“等效于"o+”
          "o{0,}“等效于"o*”
          {n,m}m和n是非负整数,其中n<=m。匹配至少n次,至多m次。
          e.g:"o{1,3}"匹配"fooooooood"中的头三个o
          "o{0,1}“等效于"o?”
          ?落到代码里,当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后,
          理解这一步时,匹配模式是“非贪心匹配”。“非贪心匹配”:匹配搜索到的尽可能短的字符串,
          而默认的“贪心匹配”则是匹配搜索到尽可能长的字符串。
          e.g:"oooo"中,"o+?“只能够匹配出单个"o”;而"o+“匹配出所有的"o”
          .匹配除"rn"之外的任何单个字符
          [xyz]字符集。匹配包含的任一字符。
          e.g:"[abc]“匹配"plain"中的"a”
          [^xyz]反向字符集。匹配未包含的任何字符。
          e.g:"[^abc]“匹配"plain"中"p”,“l”,“i”,“n”
          [a-z]字符范围。匹配指定范围内的任何字符。
          e.g:"[a-z]"匹配"a"到"z"范围内的任何小写字母
          [^a-z]反向范围字符。匹配不在指定范围内的任何字符。
          e.g:"[^a-z]"匹配任何不在"a"到"z"范围内的任何字符
          d数字字符匹配。[0-9]
          D非数字字符匹配。[^0-9]
          s匹配任何空白字符,包括空格、制表符、换页符等
          S匹配任何非空白字符
          w匹配任何类字符,包括下划线[A-Za-z0-9_]
          W与任何非单词字符匹配[^A-Za-z0-9_]

          3、实例代码

          -- PG:regexp_match:匹配函数
          select regexp_match('会议事业部69.57%/','[d.d]{1,}') "{69.57}"
          select regexp_match('会议事业部69%57%/','[d%d]{1,}') "{69%57%}"
          -- 子表达式中:[d.d]:这时候:'.' 不再是匹配除"rn"之外的任何单个字符
          select regexp_match('会议事业部69%57%/','[d.d]{1,}') "{69}"

          4、参考Demo

          -- PostgreSQL正则表达采用
          (链接已移除)
          -- Hive常用正则表达式
          (链接已移除)

          总结

          到此这篇关于用正则表达式提取数字和小数点的文章就介绍到这了,更多相关表达式提取数字小数点内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多兼容脚本之家!

          您可能感兴趣的文章:

          • python正则表达式从字符串中提取数字的思路详解
          • java正则表达式提取数字的方法实例
          • Python借助正则表达式从字符串提取数字

          相关资讯
          点击查看更多
          游戏推荐
          推荐专题
          热门阅读
          推荐下载