从字符串中提取数字是编程中非常常见的需求,比如处理用户输入的带单位的数值、解析日志中的统计数据、清洗爬虫获取的混合文本等场景都会用到。不同编程语言有不同的实现思路,下面分别介绍几种常用语言的实现方法。

Python实现方式
方法一:遍历筛选法
遍历字符串的每个字符,判断是否为数字字符,拼接得到结果,适合简单场景。
# 定义待处理的字符串
test_str = "abc123def456ghi789"
result = ""
# 遍历字符串每个字符
for char in test_str:
# 判断字符是否为数字
if char.isdigit():
result += char
print(result) # 输出123456789
方法二:正则表达式法
使用正则表达式可以灵活匹配连续的数字,还能支持小数、负数的提取。
import re test_str = "价格:99.5元,库存:-20件,备注:abc123" # 匹配整数或小数,支持负数 pattern = r"-?d+.?d*" # 查找所有匹配的数字 numbers = re.findall(pattern, test_str) print(numbers) # 输出['99.5', '-20', '123']
JavaScript实现方式
方法一:replace替换法
通过替换非数字字符为空,快速得到字符串中的数字部分。
let testStr = "abc123def456"; // 替换所有非数字字符为空 let result = testStr.replace(/[^d]/g, ""); console.log(result); // 输出123456
方法二:正则匹配法
和Python类似,使用正则匹配可以获取更灵活的数字格式。
let testStr = "温度:-5.2度,湿度:60%,备注:test789"; // 匹配整数或小数,支持负数 let pattern = /-?d+.?d*/g; let numbers = testStr.match(pattern); console.log(numbers); // 输出["-5.2", "60", "789"]
Java实现方式
Java中可以使用正则表达式配合Pattern和Matcher类实现数字提取。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.ArrayList;
import java.util.List;
public class ExtractNumber {
public static void main(String[] args) {
String testStr = "订单号:20240501,金额:199.9元";
// 定义正则匹配规则
String patternStr = "-?\d+\.?\d*";
Pattern pattern = Pattern.compile(patternStr);
Matcher matcher = pattern.matcher(testStr);
List<String> numbers = new ArrayList<>();
// 循环查找所有匹配的数字
while (matcher.find()) {
numbers.add(matcher.group());
}
System.out.println(numbers); // 输出[20240501, 199.9]
}
}
不同方法对比
下面通过表格对比不同提取方式的特点:
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| 遍历筛选法 | 逻辑简单,无需依赖额外库 | 只能提取单个数字字符,无法处理连续数字、小数、负数 | 仅需提取单个数字字符的简单场景 |
| 正则替换法 | 代码简洁,实现快速 | 只能提取连续数字,无法区分不同格式的数字 | 仅需提取所有数字拼接结果的场景 |
| 正则匹配法 | 灵活度高,支持多种数字格式 | 需要了解正则语法,复杂规则编写成本较高 | 需要提取多种格式数字、区分不同数值的场景 |
注意事项
- 提取的数字默认是字符串类型,如果需要数值计算,需要额外做类型转换,比如Python中用
int()或float()转换。 - 正则匹配时要注意特殊字符的转义,比如Java中反斜杠需要写成两个反斜杠。
- 如果字符串中没有数字,正则匹配方法会返回空列表或null,需要做空值判断避免报错。
实际开发中可以根据需求调整正则表达式,比如需要提取正整数可以去掉规则中的负号和小数点相关部分,需要提取带千分位分隔符的数字可以补充对应的匹配规则。
字符串提取数字提取正则表达式PythonJavaScript修改时间:2026-07-13 07:54:20