gpt4 book ai didi

python - 正则表达式计数出现次数

转载 作者:行者123 更新时间:2023-11-30 22:04:52 25 4
gpt4 key购买 nike

我正在寻找一种方法来根据我的正则表达式计算字符串中出现的次数。我使用了 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))

结果:

>     [('Total $200.00 Total', ' $900.00')]
> 1

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

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

等等

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

最佳答案

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

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

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']

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

关于python - 正则表达式计数出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53159435/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com