详解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多线程编程中的join函数使用心得
Sep 02 Python
python比较两个列表是否相等的方法
Jul 28 Python
Python中的getopt函数使用详解
Jul 28 Python
利用python求相邻数的方法示例
Aug 18 Python
Python实现两个list求交集,并集,差集的方法示例
Aug 02 Python
python实现公司年会抽奖程序
Jan 22 Python
Django中使用 Closure Table 储存无限分级数据
Jun 06 Python
树莓派使用USB摄像头和motion实现监控
Jun 22 Python
python可视化爬虫界面之天气查询
Jul 03 Python
django搭建项目配置环境和创建表过程详解
Jul 22 Python
Python any()函数的使用方法
Oct 28 Python
Python爬虫UA伪装爬取的实例讲解
Feb 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 fsockopen解决办法 php实现多线程
2014/01/20 PHP
一漂亮的PHP图片验证码实例
2014/03/21 PHP
PHP中使用php://input处理相同name值的表单数据
2015/02/03 PHP
PHP处理二进制数据的实现方法
2016/06/13 PHP
JS隐藏参数post传值实例
2013/04/18 Javascript
JavaScript创建类/对象的几种方式概述及实例
2013/05/06 Javascript
js截取字符串的两种方法及区别详解
2013/11/05 Javascript
jquery插件jTimer(jquery定时器)使用方法
2013/12/23 Javascript
php中给js数组赋值方法
2014/03/10 Javascript
javascript抽象工厂模式详细说明
2014/12/16 Javascript
javascript制作2048游戏
2015/03/30 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
AngularJS入门教程之过滤器详解
2016/08/19 Javascript
JavaScript 计算笛卡尔积实例详解
2016/12/02 Javascript
原生JS实现跑马灯效果
2017/02/20 Javascript
javascript 动态生成css代码的两种方法
2017/03/17 Javascript
angularjs $http实现form表单提交示例
2017/06/09 Javascript
原生js实现简单的模态框示例
2017/09/08 Javascript
Vue 实现树形视图数据功能
2018/05/07 Javascript
nodejs实现一个word文档解析器思路详解
2018/08/14 NodeJs
每个 JavaScript 工程师都应懂的33个概念
2018/10/22 Javascript
VUE渲染后端返回含有script标签的html字符串示例
2019/10/28 Javascript
jQuery实现日历效果
2020/09/11 jQuery
[13:21]DOTA2国际邀请赛采访专栏:RSnake战队国士无双,Fnatic.Fly
2013/08/06 DOTA
Python字符串逐字符或逐词反转方法
2015/05/21 Python
Python中datetime模块参考手册
2017/01/13 Python
Python自动化运维_文件内容差异对比分析
2017/12/13 Python
修改默认的pip版本为对应python2.7的方法
2018/11/06 Python
Python自定义一个异常类的方法
2019/06/27 Python
python argparser的具体使用
2019/11/10 Python
Python基于pillow库实现生成图片水印
2020/09/14 Python
python爬虫筛选工作实例讲解
2020/11/23 Python
介绍一下HDLC(High-Level Data Link Control)高层数据链路协议
2012/01/21 面试题
幼儿教师自我剖析材料
2014/09/29 职场文书
2015年秋季小学开学典礼主持词
2015/07/16 职场文书
Redis源码阅读:Redis字符串SDS详解
2021/07/15 Redis