详解Python3中字符串中的数字提取方法


Posted in Python onJanuary 14, 2017

逛到一个有意思的博客在里面看到一篇关于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 进行替换。如果没有找到匹配 pattern 的串,则返回未被修改的 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 相关文章推荐
python实现目录树生成示例
Mar 28 Python
在Python中操作字符串之startswith()方法的使用
May 20 Python
浅析Python中MySQLdb的事务处理功能
Sep 21 Python
python中matplotlib实现最小二乘法拟合的过程详解
Jul 11 Python
Python字典,函数,全局变量代码解析
Dec 18 Python
python使用xslt提取网页数据的方法
Feb 23 Python
详解python中asyncio模块
Mar 03 Python
详谈pandas中agg函数和apply函数的区别
Apr 20 Python
从运行效率与开发效率比较Python和C++
Dec 14 Python
浅谈Python中re.match()和re.search()的使用及区别
Apr 14 Python
python如何实现读取并显示图片(不需要图形界面)
Jul 08 Python
Jupyter Notebook安装及使用方法解析
Nov 12 Python
win7上python2.7连接mysql数据库的方法
Jan 14 #Python
python实现字符串连接的三种方法及其效率、适用场景详解
Jan 13 #Python
python实现读取并显示图片的两种方法
Jan 13 #Python
Python中的连接符(+、+=)示例详解
Jan 13 #Python
Python中datetime模块参考手册
Jan 13 #Python
python 计算文件的md5值实例
Jan 13 #Python
Python 字典与字符串的互转实例
Jan 13 #Python
You might like
Php做的端口嗅探器--可以指定网站和端口
2006/10/09 PHP
ThinkPHP的MVC开发机制实例解析
2014/08/23 PHP
PHP中set error handler函数用法小结
2015/11/11 PHP
PHP编写RESTful接口
2016/02/23 PHP
php抽奖概率算法(刮刮卡,大转盘)
2020/04/17 PHP
深入解析PHP中SESSION反序列化机制
2017/03/01 PHP
JQuery 绑定select标签的onchange事件,弹出选择的值,并实现跳转、传参
2011/01/06 Javascript
innerText和textContent对比及使用介绍
2013/02/27 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
js生成随机数的方法实例
2015/10/16 Javascript
json格式的javascript对象用法分析
2016/07/04 Javascript
基于vue的下拉刷新指令和滚动刷新指令
2016/12/23 Javascript
Bootstrap的popover(弹出框)在append后弹不出(失效)
2017/02/27 Javascript
JavaScript数据结构之二叉树的计数算法示例
2017/04/13 Javascript
js读取本地文件的实例
2017/12/22 Javascript
Angular实现的敏感文字自动过滤与提示功能示例
2017/12/29 Javascript
Angular 4.x+Ionic3踩坑之Ionic3.x pop反向传值详解
2018/03/13 Javascript
vue中v-for通过动态绑定class实现触发效果
2018/12/06 Javascript
深入学习Python中的装饰器使用
2016/06/20 Python
Python函数的周期性执行实现方法
2016/08/13 Python
Python中函数eval和ast.literal_eval的区别详解
2017/08/10 Python
关于python的list相关知识(推荐)
2017/08/30 Python
Python中property属性实例解析
2018/02/10 Python
python3实现SMTP发送邮件详细教程
2018/06/19 Python
libreoffice python 操作word及excel文档的方法
2019/07/04 Python
python代码编写计算器小程序
2020/03/30 Python
浅谈tensorflow 中tf.concat()的使用
2020/02/07 Python
matplotlib之多边形选区(PolygonSelector)的使用
2021/02/24 Python
艺术用品:Arteza
2018/11/25 全球购物
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
物流管理专业职业生涯规划书
2014/01/06 职场文书
项目建议书范文
2014/05/12 职场文书
贷款担保书
2015/01/20 职场文书
天河观后感
2015/06/11 职场文书
世界各国短波电台对东亚播送时间频率表(SW)
2021/06/28 无线电
德生BCL3000抢先使用感受和评价
2022/04/07 无线电