正则表达式从字符串中提取财务金额

时间:2016-01-19 09:54:08

标签: python regex python-3.x

我需要从某些字符串中提取总和。

我现在有这个

values = re.findall(r" \d*[.,]\d+", mystr)

我需要匹配所有小数值,即使它有一个"。"或","以欧洲方式和美国方式分开数千美分。 以下是一些典型的字符串:

  

DERT-UID:123456 01 DD。 2014-D C-12 BRUT:27,50 - COMM 0,37 REF.OP.123

我需要27,50和037

  

ALL / 1000.00 / NR.00123456789 / KOM。 10.00 / DAT.23.123123123123 0

我需要1000.00和10.00

  

F 1047 DU 31.12.14

我什么都不需要,但现在我的正则表达式匹配" 31.12"部分日期。

它也应该匹配" 1,000.00"或者" 1.000,00",我现在没有例子,但可能会在将来发生(或者我的正则表达不足以检测它们)。

由于

2 个答案:

答案 0 :(得分:3)

您可以在python中使用这种基于外观的正则表达式:

(?<![.,\d])\d+(?:([.,])\d+(?:\1\d+)*)?(?!\1)[.,]\d+(?![,.\d])

RegEx Demo

  • (?![,.\d])在此匹配后不是数字或点/逗号
  • 时断言下一个字符
  • (?<![,.\d])在此匹配之后断言前一个字符不是数字或点/逗号

答案 1 :(得分:1)

这样的东西?

print re.findall("\d+[,\.]\d+",re.sub(r"(\d+[\.,]\d+[\.,])+","",oldstr))