我正在尝试解析来自我的(德语)银行的交易函。我想从下面的字符串中提取所有的数字,这比我想象的要难。选项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']发布于 2013-05-01 23:29:38
This question是相关的;如下所示
print re.findall(r'\d+(?:,\d+)?', my_str)
^^ 输出
['18', '04', '2013', '18', '04', '2013', '0,9800', '18', '04', '2013', '78,40', '20,67', '78,40', '57,73']排除“虚线”数字有点复杂:
print re.findall(r'(?<!\d\.)\b\d+(?:,\d+)?\b(?!\.\d)', my_str)
^^^^^^^^^^^ ^^^^^^^^^^下面的输出
['0,9800', '78,40', '20,67', '78,40', '57,73']https://stackoverflow.com/questions/16321007
复制相似问题