gpt4 book ai didi

Python 正则表达式 (regex) 匹配逗号分隔的数字 - 为什么这不起作用?

转载 作者:太空狗 更新时间:2023-10-29 19:36:49 26 4
gpt4 key购买 nike

我正在尝试解析来 self 的(德国)银行的交易信件。我想从下面的字符串中提取所有数字,这比我想象的要难。选项 2 几乎可以满足我的要求。我现在想修改它以捕获例如80也一样。

我的第一个尝试是选项 1,它只返回垃圾。为什么它会返回这么多空字符串?它应该总是至少有一个从第一个\d+ 开始的数字,不是吗?

选项 3 有效(或至少按预期有效),所以我以某种方式回答了我自己的问题。我想我主要是在思考为什么选项 2 不起作用。

# -*- coding: utf-8 -*-
import re


my_str = """
Dividendengutschrift für inländische Wertpapiere

Depotinhaber : ME

Extag : 18.04.2013 Bruttodividende
Zahlungstag : 18.04.2013 pro Stück : 0,9800 EUR
Valuta : 18.04.2013

Bruttodividende : 78,40 EUR
*Einbeh. Steuer : 20,67 EUR
Nettodividende : 78,40 EUR

Endbetrag : 57,73 EUR
"""

print re.findall(r'\d+(,\d+)?', my_str)
print re.findall(r'\d+,\d+', my_str)
print re.findall(r'[-+]?\d*,\d+|\d+', my_str)

输出是

['', '', '', '', '', '', ',98', '', '', '', '', ',40', ',67', ',40', ',73']
['0,9800', '78,40', '20,67', '78,40', '57,73']
['18', '04', '2013', '18', '04', '2013', '0,9800', '18', '04', '2013', '78,40', '20,67', '78,40', '57,73']

最佳答案

选项 1 是最适合的正则表达式,但它无法正常工作,因为 findall 将返回捕获组 () 匹配的内容,而不是完整的匹配。

例如,您的示例中的前三个匹配项将是 18042013,并且在每种情况下都是捕获组将不匹配,因此将向结果列表添加一个空字符串。

解决方案是让组不捕获

r'\d+(?:,\d+)?'

选项 2 仅在不匹配不包含逗号的序列时才有效。

选项 3 不是很好,因为它会匹配例如+,1

关于Python 正则表达式 (regex) 匹配逗号分隔的数字 - 为什么这不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16321007/

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