详解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 cookielib 登录人人网的实现代码
Dec 19 Python
python3模拟百度登录并实现百度贴吧签到示例分享(百度贴吧自动签到)
Feb 24 Python
在Django框架中运行Python应用全攻略
Jul 17 Python
Python实现Mysql数据库连接池实例详解
Apr 11 Python
Python selenium抓取微博内容的示例代码
May 17 Python
python numpy数组的索引和切片的操作方法
Oct 20 Python
用Python解决x的n次方问题
Feb 08 Python
Python中请不要再用re.compile了
Jun 30 Python
Python上下文管理器类和上下文管理器装饰器contextmanager用法实例分析
Nov 07 Python
关于Python 中的时间处理包datetime和arrow的方法详解
Mar 19 Python
Python制作一个仿QQ办公版的图形登录界面
Sep 22 Python
Python类绑定方法及非绑定方法实例解析
Oct 09 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 获取全局变量的代码
2011/04/21 PHP
php字符串截取的简单方法
2013/07/04 PHP
php函数连续调用实例分析
2015/07/30 PHP
PHP树形结构tree类用法示例
2019/02/01 PHP
JavaScript中URL编码函数代码
2011/01/11 Javascript
常见JS效果之图片减速度滚动实现代码
2011/12/08 Javascript
jquery中常用的函数和属性详细解析
2014/03/07 Javascript
NodeJS制作爬虫全过程(续)
2014/12/22 NodeJs
javascript实现图像循环明暗变化的方法
2015/02/25 Javascript
javascript数组去重的六种方法汇总
2015/08/16 Javascript
confirm确认对话框的实现方法总结
2016/06/17 Javascript
点击页面任何位置隐藏div的实现方法
2016/09/05 Javascript
原生JS:Date对象全面解析
2016/09/06 Javascript
javascript阻止事件冒泡和浏览器的默认行为
2017/01/21 Javascript
vue vant Area组件使用详解
2019/12/09 Javascript
node.js Promise对象的使用方法实例分析
2019/12/26 Javascript
JS前端广告拦截实现原理解析
2020/02/17 Javascript
vue同个按钮控制展开和折叠同个事件操作
2020/07/29 Javascript
python浪漫表白源码
2019/04/05 Python
Django如何将URL映射到视图
2019/07/29 Python
HTML5 解决苹果手机不能自动播放音乐问题
2017/12/27 HTML / CSS
linux下进程间通信的方式
2013/01/23 面试题
护理专业毕业生推荐信
2013/10/31 职场文书
语文教学随笔感言
2014/02/18 职场文书
学历公证书范本
2014/04/09 职场文书
初三学习计划书范文
2014/04/30 职场文书
党建工作经验交流材料
2014/05/25 职场文书
咖啡厅商业计划书
2014/09/15 职场文书
出售房屋协议书范本
2014/10/06 职场文书
学校党的群众路线教育实践活动制度建设计划
2014/11/03 职场文书
员工保密协议范本,您一定得收藏!很有用!
2019/08/08 职场文书
用Python制作灯光秀短视频的思路详解
2021/04/13 Python
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS
python基础之函数的定义和调用
2021/10/24 Python
Sql Server之数据类型详解
2022/02/28 SQL Server
i7 6700处理器相当于i5几代
2022/04/19 数码科技