python - 正则表达式包括整数和以下符号 % 、 - 。$
问题描述
我目前正在解析一个字符串以获取整数,并且我能够从字符串中获取整数。但是,它并没有拉一些需要与整数保持连接的重要标点符号(% . , - $)。如何构建正则表达式来解决这些限制
- 任何数字 - 如果数字
前有 $。
- 如果有 , - 。在数字中间 -
如果最后一个数字后面有 %
revenue_numbers = []
for cell in email_body:
match = cell[cell.find('revenue'):cell.find('revenue')+100] #finds the word "revenue" and the 100 chars that follow and stores that string as a variable
rev_list = list(map(int, re.findall(r'\d+', match)))
revenue_numbers.append(rev_list)
new_df['Revenue List'] = pd.Series(revenue_numbers)
理想情况下,如果字符串是“这个值是 35%,另一个是 12.3,2018-2019 年 20 美元”,那么返回的列表将是 [35%, 12.3, $20, 2018-2019]。现在它返回 [35, 12, 3, 20, 2018, 2019]
解决方案
对于您的限制,解决方案可能如下所示。
>>> res = list(re.findall(r'\$?\d+(?:[-.,]\d+)?%?', value))
>>> res
['35%', '12.3', '$20', '2018-2019']
让我们看一下正则表达式的部分\$?\d+(?:[-.,]\d+)?%?
。
\$?
是零还是一美元的符号\d+
是一个或多个数字(?:...)?
定义一个可能不出现或只出现一次的非捕获组[-.,]\d+
是-
,.
或,
后跟一个或多个数字%?
是 0 或 1 个百分号
推荐阅读
- c# - 为什么这些具有相同哈希码的Action有不同的调用列表?
- soapui - 使用带有 Java 的 maven 插件重新运行失败的 SoapUI 测试
- mysql - MySQL - 如何根据购买的产品类型选择特定用户 ID 的最新行(并过滤掉重复项)?
- html - bootstrap img 响应高度不保持容器高度
- angular - Angular 6 Material - 使用来自服务器的数据自动完成
- amazon-web-services - REST API 无法使用 https/ssl 进行重定向
- ios - 图像在 TableView 上的数据搜索结果中表现不准确
- python - python计算某个目录中文本文件的数量
- linux - 运行 N 个 Erlang 节点并使用 bash 脚本在每个节点中执行一行
- igraph - 如何使用 R 提取图的巨型组件的邻接矩阵?