详解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中的字典操作及字典函数
Jan 03 Python
python自动重试第三方包retrying模块的方法
Apr 24 Python
Python之读取TXT文件的方法小结
Apr 27 Python
tensorflow: 查看 tensor详细数值方法
Jun 13 Python
Django实现表单验证
Sep 08 Python
python 构造三维全零数组的方法
Nov 12 Python
Python中GeoJson和bokeh-1的使用讲解
Jan 03 Python
tensorflow对图像进行拼接的例子
Feb 05 Python
从0到1使用python开发一个半自动答题小程序的实现
May 12 Python
Python实现电视里的5毛特效实例代码详解
May 15 Python
Python如何读取、写入JSON数据
Jul 28 Python
用Python将库打包发布到pypi
Apr 13 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 使用redis锁限制并发访问类示例
2016/11/02 PHP
Laravel5.1 框架响应基本用法实例分析
2020/01/04 PHP
php经典趣味算法实例代码
2020/01/21 PHP
javascript 面向对象,实现namespace,class,继承,重载
2009/10/29 Javascript
jQuery对象和DOM对象使用说明
2010/06/25 Javascript
JQuery中each()的使用方法说明
2010/08/19 Javascript
javascript 手动给表增加数据的小例子
2013/07/10 Javascript
jquery垂直公告滚动实现代码
2013/12/08 Javascript
JQuery以JSON方式提交数据到服务端示例代码
2014/05/05 Javascript
js图片滚动效果时间可随意设定当鼠标移上去时停止
2014/06/26 Javascript
让checkbox不选中即将选中的checkbox不选中
2014/07/11 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
如何使用jquery实现文字上下滚动效果
2016/10/12 Javascript
史上最全JavaScript常用的简写技巧(推荐)
2017/08/17 Javascript
Vue.js表单标签中的单选按钮、复选按钮和下拉列表的取值问题
2017/11/22 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
JavaScript变量声明var,let.const及区别浅析
2018/04/23 Javascript
vue中锚点的三种方法
2018/07/06 Javascript
Nodejs技巧之Exceljs表格操作用法示例
2019/11/06 NodeJs
[16:56]教你分分钟做大人:司夜刺客
2014/10/30 DOTA
采用python实现简单QQ单用户机器人的方法
2014/07/03 Python
Scrapy框架使用的基本知识
2018/10/21 Python
python框架flask表单实现详解
2019/11/04 Python
将 Ubuntu 16 和 18 上的 python 升级到最新 python3.8 的方法教程
2020/03/11 Python
Jupyter notebook 远程配置及SSL加密教程
2020/04/14 Python
Python中内建模块collections如何使用
2020/05/27 Python
浅谈pytorch中的BN层的注意事项
2020/06/23 Python
基于Python的接口自动化读写excel文件的方法
2021/01/15 Python
canvas线条的属性详解
2018/03/27 HTML / CSS
肯尼亚网上商城:Kilimall
2016/08/20 全球购物
最新奶茶店创业计划书范文
2014/02/08 职场文书
《草虫的村落》教学反思
2014/02/16 职场文书
总经理助理的职责
2014/03/14 职场文书
抗洪抢险事迹材料
2014/05/06 职场文书
2014年公务员转正工作总结
2014/11/07 职场文书
2015年幼儿园中班下学期工作总结
2015/05/22 职场文书