python - 创建正则表达式模式以提取浮点数和整数
问题描述
我在创建模式识别函数以从数据框列中提取所有数字并打印它们时遇到问题。
在查看数据营教程和堆栈溢出的其他问题后,我尝试创建一个正则表达式模式,但我无法创建一个可以提取所有数字并打印它们的模式。本质上,我创建的 EA 模式和像 1.12 这样的带有浮点数的 HR 模式不会返回结果。
import re
import pandas as pd
data = ['1EA @ 3217.45;', 'ST - .63HR@165;', 'ST - .5HR@123;', 'ST - 1.08HR@165;', '1EA @ 3217.45;', 'ST - .85HR@165;', 'ST - .85HR@165;', '1EA @ 3217.45;', 'ST - .12HR@165;', 'OT - 1.12HR @ 165;', 'ST - .55HR@123;OT - 0.82HR @ 123;', 'ST - .5HR@165;', 'OT - 0.45HR @ 123;', 'ST - .6HR@123;', 'ST - 1.42HR@123;', '1EA @ 1500;', 'ST - .3HR@123;', 'ST - 1HR@111;OT - 0.25HR @ 111;']
Travel = pd.DataFrame(data, columns=['Rate Breakup Description'])
for a in Travel['Rate Breakup Description']:
print(re.search('.(\d+)HR | (\d+)EA | (\d+)HR | (\d+)EA', a, re.I|re.M))
我的目标是能够拥有一个模式识别功能,该功能将提取所有数字,而不管不同的字符串模式如何,并按照它们出现的顺序打印它们。
解决方案
您可以使用
Travel['Result'] = Travel['Rate Breakup Description'].str.findall(r'\d*\.?\d+(?=HR|EA)').apply(', '.join)
模式将匹配
\d*
- 0+ 位数\.?
- 一个可选的.
\d+
- 1+ 位数(?=HR|EA)
- 后跟HR
或EA
。
将.str.findall
返回它在输入字符串中找到的所有匹配项,并.apply(', '.join)
使用逗号+空格连接结果。
如果每个输入中预期有一个匹配项,您可以使用替代解决方案:
Travel['Result'] = Travel['Rate Breakup Description'].str.extract(r'(\d*\.?\d+)(?:HR|EA)', expand=False)
这里,(\d*\.?\d+)
由于括号,是一个捕获组,这部分由.str.extract
和(?:HR|EA)
是一个非捕获组(因此不返回)匹配HR
或EA
。
推荐阅读
- python-3.x - Gitlab:Docker 中的 Docker?
- zip - 如何使用 cmd 行拆分和加入 zip 文件?
- keras - 为什么我的多标签文本分类 LSTM 表现不佳?
- javascript - TinyMCE - Wiris:无法初始化插件:tiny_mce_wiris 类型错误:M.cfg 未定义
- java - 具有 ResponseEntity 的 Spring Boot 控制器测试始终返回空响应
- javascript - 如何创建 react-chartjs 插件
- excel - VBA ListBox 不返回任何值
- postgresql - 在 Django-Graphene 中返回 Django ORM 联合结果
- react-native - @react-navigation/drawer 中的 toggleDrawer 在 React-Native 中不起作用
- python - django vs code中的块没有突出显示