正则表达式计数出现次数

ora*_*ife 6 python regex

我正在寻找一种方法来根据我的正则表达式计算字符串中出现的次数。我使用findall(),它返回一个列表,但列表的len()只有1?列表的len()不应该是2吗?

import re

string1 = r'Total $200.00 Total $900.00'
regex = r'(.*Total.*|.*Invoice.*|.*Amount.*)?(\s+?\$\s?[1-9]{1,10}.*(?: 
[.,]\d{3})*(?:[.,]\d{2})?)'
patt = re.findall(regex,string1)
print(patt)
print(len(patt))
Run Code Online (Sandbox Code Playgroud)

结果:

>     [('Total $200.00 Total', ' $900.00')]
>     1
Run Code Online (Sandbox Code Playgroud)

不确定我的正则表达式是否导致它计算错误。我希望从文件中获取总计,但有很多组合。例子:

  • 总计 900.00 美元
  • 发票金额 $500.00
  • 总计 800.00

ETC。

我想计算这一点,因为一个文件中可能有多个发票详细信息。

Tom*_*lak 3

首先,因为这是一个常见的误解:

不需要匹配“匹配之前的所有文本”或“匹配之后的所有文本”。您可以将它们放入.*正则表达式中。从您真正想要匹配的内容开始。

import re

string1 = 'Total $200.00 Total $900.00'

amount_pattern = r'(?:Total|Amt|Invoice Amt|Others)[:\s]*\$([\d\.,]*\d)'
amount_expr = re.compile(amount_pattern, re.IGNORECASE)

amount_expr.findall(string1)
# -> ['200.00', '900.00']
Run Code Online (Sandbox Code Playgroud)

\$([\d\.,]*\d)是价格的一半合理近似值(“以 a 开头$,然后包含一堆数字,可能还有点和逗号的东西”)。最后的\d确保我们不会意外地匹配句子标点符号。这可能已经足够好了,但您知道您正在使用哪些数据。请随意想出一个更具体的子表达式。-如果您预计会看到负数,请包含可选的前导。