You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用正则表达式提取字符串中的整数或小数数值?

如何用正则表达式提取字符串中的整数或小数数值

针对你给出的测试场景,我整理了一个能覆盖所有案例的正则表达式,同时会拆解匹配逻辑,并逐一验证测试用例的结果。

正则表达式

如果需要直接提取数值(无需额外捕获组处理),可以用这个简洁版:

\d+(?:[.,]\d+)?(?=[.,]?-?|\D|$)

要是需要通过捕获组明确获取数值,也可以用这个带分组的版本:

\b(\d+(?:[.,]\d+)?)(?:[.,]?-?|\D)*\b

匹配逻辑拆解

  • \d+:匹配一个或多个数字,对应数值的整数部分
  • (?:[.,]\d+)?:可选的小数部分,[.,]兼容小数点和逗号两种分隔符,后面跟一个或多个数字;?:表示这是个非捕获组,?让整个小数部分变成可选(所以能匹配纯整数)
  • (?=[.,]?-?|\D|$):正向预查,确保数值后面跟着的是这些情况之一:
    • [.,]?-?:处理像.-、-这类特殊后缀
    • \D:匹配任意非数字字符(比如e、€、/h、普通文本等)
    • $:字符串结尾

测试案例验证

以下是你提供的所有输入对应的提取结果:

  • 输入:SEK49.09 → 输出:49.09
  • 输入:SEK 49.09 → 输出:49.09
  • 输入:249,50.- → 输出:249,50
  • 输入:249.- → 输出:249
  • 输入:49- → 输出:49
  • 输入:49.90 → 输出:49.90
  • 输入:399.90e → 输出:399.90
  • 输入:49,90€ → 输出:49,90
  • 输入:525 → 输出:525
  • 输入:€28 → 输出:28
  • 输入:$29 → 输出:29
  • 输入:27,5 /h → 输出:27,5
  • 输入:27,5 text → 输出:27,5

补充说明

如果你的场景里还会出现带千分位逗号的数值(比如1,234.56),当前正则会误把1,234识别成小数,这种情况可以告诉我,我再针对性优化正则规则~

内容的提问来源于stack exchange,提问作者Pegaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 07:12:09