详解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 相关文章推荐
SublimeText 2编译python出错的解决方法(The system cannot find the file specified)
Nov 27 Python
python网络编程学习笔记(八):XML生成与解析(DOM、ElementTree)
Jun 09 Python
Python实现根据IP地址和子网掩码算出网段的方法
Jul 30 Python
Python for Informatics 第11章 正则表达式(一)
Apr 21 Python
在django中使用自定义标签实现分页功能
Jul 04 Python
Django内容增加富文本功能的实例
Oct 17 Python
Python实现二叉树的常见遍历操作总结【7种方法】
Mar 06 Python
Python 一键制作微信好友图片墙的方法
May 16 Python
Python字典底层实现原理详解
Dec 18 Python
Python RabbitMQ实现简单的进程间通信示例
Jul 02 Python
详解Python3.8+PyQt5+pyqt5-tools+Pycharm配置详细教程
Nov 02 Python
解决python3中os.popen()出错的问题
Nov 19 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
解析PHP中数组元素升序、降序以及重新排序的函数
2013/06/20 PHP
php封装的mysqli类完整实例
2016/10/18 PHP
js parentElement和offsetParent之间的区别
2010/03/23 Javascript
使用javascript获取页面名称
2014/12/23 Javascript
生成二维码方法汇总
2014/12/26 Javascript
jQuery实现ichat在线客服插件
2014/12/29 Javascript
jQuery实现div随意拖动的实例代码(通用代码)
2016/01/28 Javascript
JS实现图文并茂的tab选项卡效果示例【附demo源码下载】
2016/09/21 Javascript
JavaScript中this的用法实例分析
2016/12/19 Javascript
AngularJS实现表单验证功能
2017/01/09 Javascript
JS中的三个循环小结
2017/06/20 Javascript
js 奇葩技巧之隐藏代码
2017/08/11 Javascript
JavaScript选取(picking)和反选(rejecting)对象的属性方法
2017/08/16 Javascript
浅谈Node模块系统及其模式
2017/11/17 Javascript
JavaScript 中使用 Generator的方法
2017/12/29 Javascript
微信小程序上传图片功能(附后端代码)
2020/06/19 Javascript
用Node提供静态文件服务的方法
2018/07/06 Javascript
Node.js Windows Binary二进制文件安装方法
2019/05/16 Javascript
vue使用better-scroll实现滑动以及左右联动
2020/06/30 Javascript
nuxt 页面路由配置,主页轮播组件开发操作
2020/11/05 Javascript
跟老齐学Python之有点简约的元组
2014/09/24 Python
python中利用await关键字如何等待Future对象完成详解
2017/09/07 Python
python如何为创建大量实例节省内存
2018/03/20 Python
Python多进程池 multiprocessing Pool用法示例
2018/09/07 Python
使用Python抓取豆瓣影评数据的方法
2018/10/17 Python
基于Python共轭梯度法与最速下降法之间的对比
2020/04/02 Python
CSS3 Media Queries(响应式布局可以让你定制不同的分辨率和设备)
2013/06/06 HTML / CSS
Charles & Colvard官网:美国莫桑石品牌
2019/06/05 全球购物
成人大专生实习期的自我评价
2013/10/02 职场文书
网络技术专业求职信
2014/02/18 职场文书
国际语言毕业生求职信
2014/07/08 职场文书
2014年幼儿园班级工作总结
2014/12/17 职场文书
政府会议通知范文
2015/04/15 职场文书
护理专业毕业自我鉴定
2019/08/12 职场文书
Python带你从浅入深探究Tuple(基础篇)
2021/05/15 Python