详解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的Tornado框架异步编程入门实例
Apr 24 Python
python开发之字符串string操作方法实例详解
Nov 12 Python
Python实现基本数据结构中队列的操作方法示例
Dec 04 Python
python使用TensorFlow进行图像处理的方法
Feb 28 Python
解决python执行不输出系统命令弹框的问题
Jun 24 Python
详解利用OpenCV提取图像中的矩形区域(PPT屏幕等)
Jul 01 Python
Python变量作用域LEGB用法解析
Feb 04 Python
python实现控制台输出彩色字体
Apr 05 Python
详解anaconda离线安装pytorchGPU版
Sep 08 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
Oct 30 Python
python用字节处理文件实例讲解
Apr 13 Python
使用scrapy实现增量式爬取方式
Jun 21 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
Laravel框架处理用户的请求操作详解
2019/12/20 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
2020/04/04 PHP
javascript 中对象的继承〔转贴〕
2007/01/22 Javascript
一个不错的用JavaScript实现的UBB编码函数
2007/03/09 Javascript
XHTML下,JS浮动代码失效的问题
2009/11/12 Javascript
jquery获取input表单值的代码
2010/04/19 Javascript
Bookmarklet实现启动jQuery(模仿 云输入法)
2010/09/15 Javascript
原生js实现跨浏览器获取鼠标按键的值
2013/04/08 Javascript
JavaScript splice()方法详解
2020/09/22 Javascript
Jquery模仿Baidu、Google搜索时自动补充搜索结果提示
2013/12/26 Javascript
含有CKEditor的表单如何提交
2014/01/09 Javascript
js返回上一页并刷新的多种实现方法
2014/02/26 Javascript
JavaScript中的toLocaleLowerCase()方法使用详解
2015/06/06 Javascript
HTML5之WebSocket入门3 -通信模型socket.io
2015/08/21 Javascript
基于JQuery实现图片轮播效果(焦点图)
2016/02/02 Javascript
javascript基本算法汇总
2016/03/09 Javascript
Bootstrap布局之栅格系统详解
2016/06/13 Javascript
Web纯前端“旭日图”实现元素周期表
2017/03/10 Javascript
uploader秒传图片到服务器完整代码
2017/04/22 Javascript
整理一些最近经常遇到的前端面试题
2017/04/25 Javascript
详解plotly.js 绘图库入门使用教程
2018/02/23 Javascript
Vue引入sass并配置全局变量的方法
2018/06/27 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
2018/10/18 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
2018/10/28 Javascript
微信小程序实现自动定位功能
2018/10/31 Javascript
python操作小程序云数据库实现简单的增删改查功能
2019/06/06 Python
python将字母转化为数字实例方法
2019/10/04 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
雪花秀美国官方网站:韩国著名草本护肤化妆品品牌
2016/10/19 全球购物
请写出 float x 与"零值"比较的 if 语句
2016/01/04 面试题
个人求职简历的自我评价
2013/10/19 职场文书
老师自我鉴定范文
2013/12/25 职场文书
高级销售求职信
2014/02/21 职场文书
漂亮妈妈观后感
2015/06/08 职场文书
详解thinkphp的Auth类认证
2021/05/28 PHP