详解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中的__init__、__new__和__call__方法
Jul 18 Python
利用Python2下载单张图片与爬取网页图片实例代码
Dec 25 Python
python实现用户管理系统
Jan 10 Python
使用Python进行QQ批量登录的实例代码
Jun 11 Python
python中的turtle库函数简单使用教程
Jul 23 Python
python通过zabbix api获取主机
Sep 17 Python
利用Python如何实现一个小说网站雏形
Nov 23 Python
使用Python实现牛顿法求极值
Feb 10 Python
Python如何将图像音视频等资源文件隐藏在代码中(小技巧)
Feb 16 Python
Mac中PyCharm配置Anaconda环境的方法
Mar 04 Python
python 判断文件或文件夹是否存在
Mar 18 Python
python pygame 开发五子棋双人对弈
May 02 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
提问的智慧(2)
2006/10/09 PHP
php获取根域名方法汇总
2014/10/28 PHP
Laravel 5框架学习之表单
2015/04/08 PHP
PHP有序表查找之二分查找(折半查找)算法示例
2018/02/09 PHP
Thinkphp5框架实现获取数据库数据到视图的方法
2019/08/14 PHP
jquery 上下滚动广告
2009/06/17 Javascript
SWFObject基本用法实例分析
2015/07/20 Javascript
javascript拖拽效果延伸学习
2016/04/04 Javascript
前端面试题及答案整理(二)
2016/08/26 Javascript
使用Node.js给图片加水印的方法
2016/11/15 Javascript
详解vue2.0的Element UI的表格table列时间戳格式化
2017/06/13 Javascript
ionic 3.0+ 项目搭建运行环境的教程
2017/08/09 Javascript
详解Vue 多级组件透传新方法provide/inject
2018/05/09 Javascript
解决vue中修改export default中脚本报一大堆错的问题
2018/08/27 Javascript
angularJs中$scope数据序列化的实例
2018/09/30 Javascript
浅谈Vue为什么不能检测数组变动
2019/10/14 Javascript
vue-router 中 meta的用法详解
2019/11/01 Javascript
vue 使用 v-model 双向绑定父子组件的值遇见的问题及解决方案
2021/03/01 Vue.js
python批量修改文件后缀示例代码分享
2013/12/24 Python
Python中属性和描述符的正确使用
2016/08/23 Python
Python使用正则表达式分割字符串的实现方法
2019/07/16 Python
简单了解Django ContentType内置组件
2019/07/23 Python
torchxrayvision包安装过程(附pytorch1.6cpu版安装)
2020/08/26 Python
Lombok插件安装(IDEA)及配置jar包使用详解
2020/11/04 Python
利用canvas实现图片压缩的示例代码
2018/07/17 HTML / CSS
美国时尚孕妇装品牌:A Pea in the Pod
2017/07/16 全球购物
美国时尚假发购物网站:Wigsbuy
2019/04/06 全球购物
AMAVII眼镜官网:时尚和设计师太阳镜
2019/05/05 全球购物
学雷锋活动简报
2015/07/20 职场文书
开学典礼校长致辞
2015/07/29 职场文书
宝宝满月宴答谢词
2015/09/30 职场文书
2019教师的学习计划
2019/06/25 职场文书
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
2021/04/16 PHP
Mysql8.0递归查询的简单用法示例
2021/08/04 MySQL
Python pyecharts绘制条形图详解
2022/04/02 Python
Python 匹配文本并在其上一行追加文本
2022/05/11 Python