前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python如何提取文本中的所有数字,原来这问题这么难

Python如何提取文本中的所有数字,原来这问题这么难

作者头像
咋咋
发布2021-09-01 12:22:04
4.6K0
发布2021-09-01 12:22:04
举报
文章被收录于专栏:数据大宇宙

前言

你可能会遇到过各种文本处理,从文本中其他所有数值,初看起来没有啥特别难度。

但是,数据经常让你"喜出望外"。

今天我们使用各种方式从文本中提取有效的数值:

  • 普通方式
  • 正则表达式

Python内置方法

为了方便对比各种实现方式,我们把待验证的文本与正确结果写入 excel 表格:

为了简化调用,我封装了一系列流程,我们只需要定义一个处理函数即可:

  • 行2:逻辑非常简单,按空格分列,然后通过字符串方法 isdigit 就能判断是否为数值

这个方式非常好,因为直观简单。

但是从验证结果可以看到,大部分的数据都没能通过

接下来就要使用核武器


正则表达式

简单的正则表达式还是挺好弄:

  • 行2:表达式 "\d" 表示一个数字,"\d+" 表示1个或多个数字。所以就是匹配多个连续数字
  • 但是,效果上与上一个方式一样

我们注意到测试表中,有些内容数值前有正负号,还有科学计数法

·不妨在数字前面加上可能出现的正负号:

  • 为了让正则表达式更容易看,我喜欢分开定义每个区域
  • 行2:"[+-]" 表示 + 或 - 号,"[+-]?" ,问号是一个量词,表示有1个或没有。整个的意思是 "加号或减号可能没有,也可能有一个"

没有多大改进,只是多通过了一行

看了第二行大概就能知道,我们没有考虑小数:

  • 行4:因为正则表达式中的 "." 本意是表示任意一个符号,但是用在[] 中就能表达"一个点"。这里也可以使用 ".?"
  • 小数点可能没有,也可能只有一个,所以用"?"
  • 行5:小数点后的连续数字,注意可能没有,也可能有多个,用 "*" 表达这个数量

这次好很多了。

现在集中解决索引3的 case,注意到他有科学计数法(45e5 等):

  • 行6:科学计数hi法部分, e 或 E,然后是加减号(可能没有,或只有一个),然后连续数字。最重要的是,整个科学计数法部分可能没有,或只有一个,所以我们要用括号把他们包围,然后打算量词"?" 表达
  • 为什么括号一开始要用"?:" ,因为正则表达式的括号有捕获结果的功能,但我们这里的括号不需要捕获。所以用 "?:" 表示不捕获

还有最后3个 case 没有通过,但我也解决不了。希望有高手能指点。

先到这里吧,估计我过几天就看不懂这些代码了。

本文源码请发送 "python 正则" 获取


你学会了没有?

记得点赞,转发!谢谢支持!

推荐阅读:

pandas输出的表格竟然可以动起来?教你华而不实的python

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-29,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据大宇宙 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • Python内置方法
  • 正则表达式
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档