首页 > 解决方案 > 正则表达式包括整数和以下符号 % 、 - 。$

问题描述

我目前正在解析一个字符串以获取整数,并且我能够从字符串中获取整数。但是,它并没有拉一些需要与整数保持连接的重要标点符号(% . , - $)。如何构建正则表达式来解决这些限制

- 任何数字 - 如果数字
前有 $。
- 如果有 , - 。在数字中间 -
如果最后一个数字后面有 %

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]

标签: pythonexcelpandascsv

解决方案


对于您的限制,解决方案可能如下所示。

>>> res = list(re.findall(r'\$?\d+(?:[-.,]\d+)?%?', value))
>>> res
['35%', '12.3', '$20', '2018-2019']

让我们看一下正则表达式的部分\$?\d+(?:[-.,]\d+)?%?

  • \$?是零还是一美元的符号
  • \d+是一个或多个数字
  • (?:...)?定义一个可能不出现或只出现一次的非捕获组
  • [-.,]\d+-,.,后跟一个或多个数字
  • %?是 0 或 1 个百分号

推荐阅读