详解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 相关文章推荐
对numpy.append()里的axis的用法详解
Jun 28 Python
python特性语法之遍历、公共方法、引用
Aug 08 Python
python 分离文件名和路径以及分离文件名和后缀的方法
Oct 21 Python
python 提取tuple类型值中json格式的key值方法
Dec 31 Python
Python (Win)readline和tab补全的安装方法
Aug 27 Python
kafka-python 获取topic lag值方式
Dec 23 Python
pytorch 批次遍历数据集打印数据的例子
Dec 30 Python
python 错误处理 assert详解
Apr 20 Python
Python爬取微信小程序通用方法代码实例详解
Sep 29 Python
Python如何批量生成和调用变量
Nov 21 Python
python 多态 协议 鸭子类型详解
Nov 27 Python
python的列表生成式,生成器和generator对象你了解吗
Mar 16 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
将数字格式的计算结果转为汉字格式
2006/10/09 PHP
MySQL GBK→UTF-8编码转换
2007/05/24 PHP
php 读取shell管道传输过来的内容
2010/03/01 PHP
Laravel框架中扩展函数、扩展自定义类的方法
2014/09/04 PHP
php猴子选大王问题解决方法
2015/05/12 PHP
php实现多城市切换特效
2015/08/09 PHP
PHP进制转换实例分析(2,8,16,36,64进制至10进制相互转换)
2017/02/04 PHP
PHP实现批量重命名某个文件夹下所有文件的方法
2017/09/04 PHP
详解PHP发送邮件知识点
2018/05/06 PHP
Laravel相关的一些故障解决
2020/08/19 PHP
基于jQuery的可用于选项卡及幻灯的切换插件
2011/03/28 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
jQuery验证插件validation使用指南
2015/04/21 Javascript
JavaScript 基础函数_深入剖析变量和作用域
2016/05/18 Javascript
JQuery EasyUI Layout 在from布局自适应窗口大小的实现方法
2016/05/28 Javascript
基于vue2.0实现的级联选择器
2017/06/09 Javascript
关于js陀螺仪的理解分析
2019/04/11 Javascript
vue-router 前端路由之路由传值的方式详解
2019/04/30 Javascript
jquery轮播图插件使用方法详解
2020/07/31 jQuery
微信小程序实现分页加载效果
2020/11/19 Javascript
利用python将json数据转换为csv格式的方法
2018/03/22 Python
Python导入模块包原理及相关注意事项
2020/03/25 Python
详解用Python爬虫获取百度企业信用中企业基本信息
2020/07/02 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
免费获得微软MCSD证书赶快行动吧!
2012/11/13 HTML / CSS
GoDaddy英国:全球排名第一的域名注册商
2018/06/08 全球购物
北美Newegg打造的全球尖货海购平台:tt海购
2018/09/28 全球购物
Brasty波兰:香水、化妆品、手表网上商店
2019/04/15 全球购物
德国最大的网上足球商店:11teamsports
2019/09/11 全球购物
中学教师岗位职责
2013/11/26 职场文书
烹饪自我鉴定
2014/03/01 职场文书
公休请假条
2014/04/11 职场文书
个人求职信范文
2014/05/24 职场文书
文员转正自我鉴定怎么写
2014/09/29 职场文书
政风行风整改报告
2014/11/06 职场文书
MySQL分库分表详情
2021/09/25 MySQL