使用正则表达式使用点和逗号提取数字

时间:2015-07-16 13:12:06

标签: python regex string python-2.7 extract

我已经阅读了很多页面试图向我解释如何使用regex用于Python,但我仍然没有得到它。即使regex wikire documentation也无法帮助我。我仍然有点困惑:P

我有以下字符串:

string = "|C195|1|Base de Cálculo ST: 2.608,24 - Valor da ST: 163,66|"

我正在尝试使用以下内容仅提取2.608,24163,66

st_values = re.findall("\d+[,.]\d+", string)

但是,print st_values的输出是:

['2.608','163,66']

相反,我希望它是

['2.608,24','163,66']

我不想要

['195', '1', '2.608,24','163,66']

那么,我怎样才能使用正则表达式参数的字母表来提取它们呢?

3 个答案:

答案 0 :(得分:2)

我建议:

\b\d{1,3}(?:\.\d{3})*,\d+\b

这是demo

这是一个IDEONE code demo

import re
p = re.compile(r'\b\d{1,3}(?:\.\d{3})*,\d+\b')
test_str = "|C195|1|Base de Cálculo ST: 2.608,24 - Valor da ST: 2.608.234,24 12.608.234,24\n  163,66|\nd2.608.234,24\n2.60d8.23d4,24"
print(re.findall(p, test_str))

答案 1 :(得分:1)

试试这个(此正则表达式还假设匹配1,23之类的字符串。) -

>>> re.findall("\d+(?:\.\d+)?,\d+", string)
['2.608,24', '163,66']

Regex demo and Explanation

答案 2 :(得分:1)

如果要从第二个最后一列/字段中提取数字,可以执行以下操作:

 In: re.findall(r"[0-9,.]+",string.split('|')[-2])      
Out: ['2.608,24', '163,66']

否则,如果你只使用正则表达式,并且其他列中有相似的数字,则有问题要将它们过滤掉。