详解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编程实现语音控制电脑
Apr 01 Python
Python中利用原始套接字进行网络编程的示例
May 04 Python
python中__call__内置函数用法实例
Jun 04 Python
python 通过字符串调用对象属性或方法的实例讲解
Apr 21 Python
django中静态文件配置static的方法
May 20 Python
浅谈Python traceback的优雅处理
Aug 31 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
Jun 03 Python
python aiohttp的使用详解
Jun 20 Python
用python做游戏的细节详解
Jun 25 Python
Python如何基于selenium实现自动登录博客园
Dec 16 Python
django的autoreload机制实现
Jun 03 Python
python实现商品进销存管理系统
May 30 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统计目录中文件以及目录中目录大小的方法
2016/01/09 PHP
Jquery公告滚动+AJAX后台得到数据
2011/04/14 Javascript
js setTimeout 参数传递使用介绍
2013/08/13 Javascript
点击显示指定元素隐藏其他同辈元素的方法
2014/02/19 Javascript
javascript异步编程的4种方法
2014/02/19 Javascript
jQuery中next()方法用法实例
2015/01/07 Javascript
深入理解JavaScript中为什么string可以拥有方法
2016/05/24 Javascript
jQuery简单实现仿京东分类导航层效果
2016/06/07 Javascript
Vuejs 用$emit与$on来进行兄弟组件之间的数据传输通信
2017/02/23 Javascript
jQueryMobile之窗体长内容的缺陷与解决方法实例分析
2017/09/20 jQuery
JS写XSS cookie stealer来窃取密码的步骤详解
2017/11/20 Javascript
Vue 莹石摄像头直播视频实例代码
2018/08/31 Javascript
vue实现多个元素或多个组件之间动画效果
2018/09/25 Javascript
浅析Angular 实现一个repeat指令的方法
2019/07/21 Javascript
python构造icmp echo请求和实现网络探测器功能代码分享
2014/01/10 Python
python获取各操作系统硬件信息的方法
2015/06/03 Python
python构建自定义回调函数详解
2017/06/20 Python
python中set()函数简介及实例解析
2018/01/09 Python
Python比较2个时间大小的实现方法
2018/04/10 Python
详解python单元测试框架unittest
2018/07/02 Python
Python 实现两个服务器之间文件的上传方法
2019/02/13 Python
在Python中使用Neo4j的方法
2019/03/14 Python
Python面向对象程序设计类的多态用法详解
2019/04/12 Python
基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能
2019/07/15 Python
django admin组件使用方法详解
2019/07/19 Python
Python任务调度模块APScheduler使用
2020/04/15 Python
keras 两种训练模型方式详解fit和fit_generator(节省内存)
2020/07/03 Python
用python对oracle进行简单性能测试
2020/12/05 Python
HTMl5的存储方式sessionStorage和localStorage详解
2014/03/18 HTML / CSS
专科应届生求职信
2013/11/24 职场文书
2014年元旦活动方案
2014/02/15 职场文书
婚前协议书范本
2014/04/15 职场文书
企业指导教师评语
2014/04/28 职场文书
深入浅析Django MTV模式
2021/09/04 Python
java多态注意项小结
2021/10/16 Java/Android
Python数据结构之队列详解
2022/03/21 Python