Python3提取字符串中数字的两种实用方法解析

小鹿同学
小鹿同学
发布时间:2026-10-13| 2人浏览过
原创

本文详解Python3中提取字符串内数字的两种常用方法。首先解析利用re.sub配合正则表达式\D替换非数字字符的实现原理及代码示例;其次探讨通过split()按空格分隔并取首元素的方式处理特定格式数据。对比两者适用场景与局限性,为处理爬虫数据或格式化文本提供清晰的技术参考。

在浏览技术博客时,看到一篇关于解决 ValueError: invalid literal for int() with base 10 错误的文章。博主提出的解决方案是运用 re.sub 方法。

 totalCount = '100abc'
 totalCount = re.sub("\D", "", totalCount) 

但该文章未深入解释其具体含义,因此查阅相关资料并整理记录如下:

查阅 Python3.5.2 官方文档中关于 re 模块 sub 函数的定义,其核心逻辑如下:

re.sub(pattern, repl, string, count=0, flags=0)

该函数会在字符串 string 中查找所有匹配正则表达式 pattern 的子串,并使用另一个字符串 repl 进行替换。若未找到匹配项,则直接返回原始未修改的 string。参数 repl 既可以是字符串,也可以是函数。

基于上述定义,可以分析前文示例语句的含义:在字符串 '100abc' 中,利用正则表达式中的 '\D'(代表非数字字符)匹配所有非数字部分,并将其替换为空字符串 ""。最终返回的结果即为仅包含数字的字符串。

>>> totalCount = '100abc'

>>> totalCount = re.sub("\D", "", totalCount)

>>> print(totalCount)

100

>>> type(totalCount)

<class 'str'> 

上述原理说明完毕。此外,笔者在爬取知乎关注的问答内容时,也遇到了类似的数据处理问题:

 answer_num_get = soup.find('h3', {'id': 'zh-question-answer-num'})  # 答案数量:32 个回答
 if answer_num_get is not None:
   answer_num = int(answer_num_get.split()[0])
 n = answer_num // 10 

代码中的第三行之所以能成功使用 int() 转换,是因为 string.split()[0] 将变量 answer_num_get 的值 "32 个回答" 中的数字部分提取出来(注:"32" 后方存在一个空格,这一细节至关重要,因为从知乎抓取回来的该元素确实包含此空格)。

这里涉及 split() 方法的定义:str.split(sep=None, maxsplit=-1)。

>>> import string
>>> a = "32 个答案"
>>> b = a.split()[0]
>>> print(b)
32
>>> type(b)
<class 'str'>
>>> c = '1,2,3'
>>> c.split(',')
['1', '2', '3']
>>> c.split(',')[0]
'1'
>>> c.split(',')[1]
'2'
>>> 

由此可见,split() 的第一个参数用于指定分隔符。若不提供任何参数,则默认以空格作为分隔符进行切割。

第一种方法依赖正则表达式,而第二种方法则需要数据中包含明确的分隔符(推测原网页总答案数数字后存在空格是此方法生效的原因)。这两种方法均存在一定的局限性,目前尚不清楚是否有更优的字符串数字分离方案。

以上即为本文的全部内容,希望对各位的学习有所帮助,也欢迎大家继续支持本站。

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。