详解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 30 Python
用python3教你任意Html主内容提取功能
Nov 05 Python
对Python中创建进程的两种方式以及进程池详解
Jan 14 Python
解决python线程卡死的问题
Feb 18 Python
python如何制作缩略图
Apr 30 Python
python文本数据处理学习笔记详解
Jun 17 Python
简单了解python PEP的一些知识
Jul 13 Python
详解python中__name__的意义以及作用
Aug 07 Python
使用python写的opencv实时监测和解析二维码和条形码
Aug 14 Python
使用Django实现商城验证码模块的方法
Jun 01 Python
Python访问Redis的详细操作
Jun 26 Python
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
Oct 16 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页码形式分页函数支持静态化地址及ajax分页
2014/03/28 PHP
检测codeigniter脚本消耗内存情况的方法
2015/03/21 PHP
javascript实现划词标记+划词搜索功能
2007/03/06 Javascript
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
JS 面向对象之神奇的prototype
2011/02/26 Javascript
jQuery的deferred对象使用详解
2011/08/20 Javascript
30个精美的jQuery幻灯片效果插件和教程
2011/08/23 Javascript
JS中Iframe之间传值及子页面与父页面应用
2013/03/11 Javascript
HTML5之lang属性与dir属性的详解
2013/06/19 Javascript
解析JSON对象与字符串之间的相互转换
2013/12/18 Javascript
JavaScript中匿名函数的用法及优缺点详解
2016/06/01 Javascript
JavaScript 轮播图和自定义滚动条配合鼠标滚轮分享代码贴
2016/10/28 Javascript
AngularJS实现表单验证功能
2017/01/09 Javascript
基于Bootstrap的网页设计实例
2017/03/01 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
2017/03/19 Javascript
JS运动特效之链式运动分析
2018/01/24 Javascript
深入浅析Node.js 事件循环、定时器和process.nextTick()
2018/10/22 Javascript
微信小程序-API接口安全详解
2019/07/16 Javascript
JS实现移动端双指缩放和旋转方法
2019/12/13 Javascript
JS实现分页导航效果
2020/02/19 Javascript
Python中的fileinput模块的简单实用示例
2015/07/09 Python
python递归实现快速排序
2018/08/18 Python
3种python调用其他脚本的方法
2020/01/06 Python
Python DataFrame使用drop_duplicates()函数去重(保留重复值,取重复值)
2020/07/20 Python
Python安装并操作redis实现流程详解
2020/10/13 Python
IE浏览器单独写CSS样式的几种方法
2014/10/14 HTML / CSS
详解H5本地储存Web Storage
2017/07/03 HTML / CSS
瑜伽灵感珠宝:Satya Jewelry
2018/01/06 全球购物
意大利珠宝店:Luxury Zone
2019/01/05 全球购物
公司部门司机岗位职责
2014/01/03 职场文书
机关作风建设心得体会
2014/10/22 职场文书
2015年企业新年寄语
2014/12/08 职场文书
指导教师推荐意见
2015/06/05 职场文书
2015年思想品德教学工作总结
2015/07/22 职场文书
FFmpeg视频处理入门教程(新手必看)
2022/01/22 杂记
戴尔Win11系统no bootable devices found解决教程
2022/09/23 数码科技