如何用正则表达式提取字符串中的整数或小数数值?
如何用正则表达式提取字符串中的整数或小数数值
针对你给出的测试场景,我整理了一个能覆盖所有案例的正则表达式,同时会拆解匹配逻辑,并逐一验证测试用例的结果。
正则表达式
如果需要直接提取数值(无需额外捕获组处理),可以用这个简洁版:
\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
相关产品推荐
相关产品推荐

