详解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解析xml中dom元素的方法
Mar 12 Python
python通过apply使用元祖和列表调用函数实例
May 26 Python
Python上下文管理器和with块详解
Sep 09 Python
如何用python整理附件
May 13 Python
儿童学习python的一些小技巧
May 27 Python
django进阶之cookie和session的使用示例
Aug 17 Python
Python关于excel和shp的使用在matplotlib
Jan 03 Python
解决python线程卡死的问题
Feb 18 Python
在Python中过滤Windows文件名中的非法字符方法
Jun 10 Python
pandas计数 value_counts()的使用
Jun 24 Python
浅谈Python3实现两个矩形的交并比(IoU)
Jan 18 Python
python十进制转二进制的详解
Feb 07 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生成随机密码方法汇总
2015/08/27 PHP
php获取数据库结果集方法(推荐)
2017/06/01 PHP
实例讲解PHP中使用命名空间
2019/01/27 PHP
js checkbox(复选框) 使用集锦
2009/04/28 Javascript
JS判断日期格式是否合法的简单实例
2016/07/11 Javascript
详解有关easyUI的拖动操作中droppable,draggable用法例子
2017/06/03 Javascript
vue单页应用中如何使用jquery的方法示例
2017/07/27 jQuery
JavaScript文件的同步和异步加载的实现代码
2017/08/19 Javascript
vee-validate vue 2.0自定义表单验证的实例
2018/08/28 Javascript
jQuery插件实现非常实用的tab栏切换功能【案例】
2019/02/18 jQuery
vue双向绑定数据限制长度的方法
2019/11/04 Javascript
js实现圆形菜单选择器
2020/12/03 Javascript
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
Python中的类与对象之描述符详解
2015/03/27 Python
Python中生成Epoch的方法
2017/04/26 Python
PyCharm设置SSH远程调试的方法
2018/07/17 Python
详解关于Django中ORM数据库迁移的配置
2018/10/08 Python
python判断输入日期为第几天的实例
2018/11/13 Python
使用python3实现操作串口详解
2019/01/01 Python
Python中Numpy mat的使用详解
2019/05/24 Python
python输出电脑上所有的串口名的方法
2019/07/02 Python
Python用字典构建多级菜单功能
2019/07/11 Python
python psutil模块使用方法解析
2019/08/01 Python
django正续或者倒序查库实例
2020/05/19 Python
Java ExcutorService优雅关闭方式解析
2020/05/30 Python
如何利用Python动态模拟太阳系运转
2020/09/04 Python
中式结婚主持词
2014/03/14 职场文书
食品采购员岗位职责
2014/04/14 职场文书
公司财务会计主管应聘求职信
2014/09/26 职场文书
2014年单位工作总结范文
2014/11/27 职场文书
2016年春节慰问信息大全
2015/11/30 职场文书
廉政党课工作报告案例
2019/06/21 职场文书
CSS 使用 resize 实现图片拖拽切换预览功能(强大功能)
2021/08/23 HTML / CSS
js 数组 fill() 填充方法
2021/11/02 Javascript
Python TypeError: ‘float‘ object is not subscriptable错误解决
2022/12/24 Python