使用Python从字符串提取数字
在Python中,有时候需要从字符串中提取特定的数字信息,这种操作很常见。例如,从一篇新闻报道中提取新闻发布日期、从一篇小说中提取章节编号等。那么,如何使用Python从字符串中提取数字呢?本文将介绍几种方式。
阅读更多:Python 教程
方法一:使用正则表达式
正则表达式是一种专门用于字符串匹配的工具,在Python中有re模块支持正则表达式操作。通过正则表达式,可以匹配和提取字符串中的数字。具体实现代码如下:
-
import re
-
-
str1 = '这是一段包含数字的字符串 123456,可以使用正则表达式提取数字'
-
-
# 定义正则表达式
-
pattern = r'\d '
-
-
# 匹配字符串中的数字
-
match_obj = re.findall(pattern, str1)
-
-
# 输出匹配结果
-
print(match_obj)
Python
Copy
代码中,使用re.findall
函数匹配字符串中的数字,匹配规则由正则表达式r’\d ’定义,\d表示匹配数字, 表示匹配前面的1个或多个数字。执行上述代码后,输出结果为['123456']
。
如果需要提取多组数字,只需要修改正则表达式的定义即可。例如,需要提取下面字符串中的数字:
str2 = 'Python是一门流行的编程语言,目前最新版本是Python 3.10,发布于2021年10月4日'
Bash
Copy
该字符串中包含两组数字,分别是3.10和2021年10月4日。可以使用r’\d .\d ’匹配版本号,使用r’\d{4}年\d{1,2}月\d{1,2}日’匹配日期信息。具体的代码实现如下:
-
import re
-
-
str2 = 'Python是一门流行的编程语言,目前最新版本是Python 3.10,发布于2021年10月4日'
-
-
# 定义正则表达式
-
pattern1 = r'\d \.\d '
-
pattern2 = r'\d{4}年\d{1,2}月\d{1,2}日'
-
-
# 匹配字符串中的数字
-
match_obj1 = re.findall(pattern1, str2)
-
match_obj2 = re.findall(pattern2, str2)
-
-
# 输出匹配结果
-
print(match_obj1)
-
print(match_obj2)
Python
Copy
在上述代码中,使用了两个正则表达式,匹配结果存储在match_obj1
和match_obj2
变量中,输出结果分别为['3.10']
和['2021年10月4日']
。
方法二:使用字符串方法
除了正则表达式外,Python的字符串还提供了一些常用的方法,可以方便地从字符串中提取数字。下面介绍一些常用的字符串方法。
方法一:isdigit()
isdigit()方法可以判断一个字符串是否只包含数字字符。如果包含数字字符,则返回True,否则返回False。如果一个字符串只有部分字符为数字,也会返回False。例如,字符串’12345’返回True,字符串’12F45’返回False。具体代码如下:
-
str3 = '1969年7月20日 20:17:40'
-
-
num_str = ''
-
-
# 提取字符串中的数字
-
for char in str3:
-
if char.isdigit():
-
num_str = char
-
-
# 输出匹配结果
-
print(num_str)
Python
Copy
在上述代码中,使用字符串方法isdigit()判断字符是否为数字,将字符串中的数字提取出来,输出结果为19697201740
。
方法二:isnumeric()
isnumeric()方法可以判断一个字符串是否只包含数字字符和数字字符对应的Unicode数值。如果包含数字字符和对应的Unicode数值,则返回True,否则返回False。例如,字符串’12345’和字符串’一二三四五’都返回True,而字符串’12F45’和字符串’$#@!’都返回False。具体代码如下:
-
str4 = '一二三四五 12345'
-
-
num_str = ''
-
-
# 提取字符串中的数字
-
for char in str4:
-
if char.isnumeric():
-
num_str = char
-
-
# 输出匹配结果
-
print(num_str)
Python
Copy
执行上述代码后,输出结果为一二三四五12345
,只提取其中的数字字符。
方法三:split()
split()方法可以将一个字符串按指定字符分割成若干个子字符串,并返回一个列表。例如,可以使用空格、逗号、分号等分割符将一个字符串分割成若干个子字符串。许多时候,字符串中的数字和非数字字符混合在一起,可以使用split()方法将字符串按照非数字字符分割成若干个子字符串,再从中提取数字。具体代码如下:
-
str5 = '这个字符串包含数字12、54和97,还有一些其他英文字母'
-
-
num_list = []
-
-
# 将字符串按非数字字符分割成若干个子字符串
-
str_lst = str5.split(' ')
-
for s in str_lst:
-
if s.isdigit():
-
num_list.append(int(s))
-
-
# 输出匹配结果
-
print(num_list)
Python
Copy
在上述代码中,使用split()方法将字符串按照空格分割成若干个子字符串,如果子字符串是数字,则将其转换成整数并存储在列表中,输出结果为[12, 54, 97]
。
方法三:使用第三方库
Python的第三方库很多,其中一些库可以方便地从字符串中提取数字。例如,使用NumPy库中的函数可以将字符串中的数字转换成浮点数。具体代码如下:
-
import numpy as np
-
-
str6 = '3.1415926'
-
-
# 将字符串转换成浮点数
-
num_float = np.float(str6)
-
-
# 输出匹配结果
-
print(num_float)
Python
Copy
在上述代码中,使用NumPy库中的np.float()函数将字符串转换成浮点数,输出结果为3.1415926
。
结论
使用Python从字符串中提取数字,可以使用正则表达式、字符串方法或第三方库。如果字符串中的数字位置和格式较为固定,使用正则表达式可以比较方便地提取数字;如果字符串中数字和非数字字符混合在一起,可以使用字符串方法将字符串分割成若干个子字符串提取数字;如果需要将字符串中的数字转换成数字类型,也可以使用第三方库提供的函数快速实现。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhihcjhg
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
excel图片置于文字下方的方法
PHP中文网 06-27 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
微信提示登录环境异常是什么意思原因
PHP中文网 04-09 -
微信运动停用后别人还能看到步数吗
PHP中文网 07-22 -
微信人名旁边有个图标有什么用
PHP中文网 03-11