详解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网络编程学习笔记(四):域名系统
Jun 09 Python
Python基于DES算法加密解密实例
Jun 03 Python
win10环境下python3.5安装步骤图文教程
Feb 03 Python
django一对多模型以及如何在前端实现详解
Jul 24 Python
python2.7实现复制大量文件及文件夹资料
Aug 31 Python
python使用itchat模块给心爱的人每天发天气预报
Nov 25 Python
python 操作hive pyhs2方式
Dec 21 Python
python实现串口通信的示例代码
Feb 10 Python
Keras 快速解决OOM超内存的问题
Jun 11 Python
pycharm 代码自动补全的实现方法(图文)
Sep 18 Python
python 实现的截屏工具
May 08 Python
python 命令行传参方法总结
May 25 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
全国FM电台频率大全 - 8 黑龙江省
2020/03/11 无线电
如何用php获取程序执行的时间
2013/06/09 PHP
yii分页组件用法实例分析
2015/12/28 PHP
使用php+swoole对client数据实时更新(一)
2016/01/07 PHP
php+websocket 实现的聊天室功能详解
2020/05/27 PHP
javascript获取选中的文本的方法代码
2013/10/30 Javascript
js实现的折叠导航示例
2013/11/29 Javascript
JavaScript弹出窗口方法汇总
2014/08/12 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
jQuery实现的fixedMenu下拉菜单效果代码
2015/08/24 Javascript
微信小程序 textarea 组件详解及简单实例
2017/01/10 Javascript
使用 Vue.js 仿百度搜索框的实例代码
2017/05/09 Javascript
Vue的土著指令和自定义指令实例详解
2018/02/04 Javascript
express.js中间件说明详解
2019/03/19 Javascript
[50:05]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第二场 8.22
2018/08/23 DOTA
python使用pil生成图片验证码的方法
2015/05/08 Python
Python实现获取前100组勾股数的方法示例
2018/05/04 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
浅谈python函数调用返回两个或多个变量的方法
2019/01/23 Python
python super用法及原理详解
2020/01/20 Python
详解python 条件语句和while循环的实例代码
2020/12/28 Python
html5 input元素新特性_动力节点Java学院整理
2017/07/06 HTML / CSS
HTML5 Canvas基本线条绘制的实例教程
2016/03/17 HTML / CSS
英国口碑最好的的维他命胶囊品牌:Myvitamins(有中文站)
2016/12/03 全球购物
PacSun官网:加州生活方式服装、鞋子和配饰
2018/03/10 全球购物
租租车:国际租车、美国租车、欧洲租车、特价预订国外租车(中文服务)
2018/03/28 全球购物
英国现代市场:ARKET
2019/04/10 全球购物
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
泰海淘:泰国king Power王权免税集团旗下跨境海淘综合型电商
2020/07/26 全球购物
.NET面试题:什么是值类型和引用类型
2016/01/12 面试题
乡下人家教学反思
2014/02/01 职场文书
理工学院学生自我鉴定
2014/02/23 职场文书
优秀求职信
2014/05/29 职场文书
童年读书笔记
2015/06/26 职场文书
2016年教师政治思想表现评语
2015/12/02 职场文书
Python requests库参数提交的注意事项总结
2021/03/29 Python