Python regex从字符串中提取财务金额

Python regex从字符串中提取财务金额,python,regex,python-3.x,Python,Regex,Python 3.x,我需要从一些字符串中提取和 我现在有这个 values = re.findall(r" \d*[.,]\d+", mystr) 我需要匹配所有十进制值,即使有一个“.”或“,”以区分欧洲和美国的千分之一。 以下是一些典型的字符串: DERT-UID:123456 01 DD.2014-D C-12 BRUT:27,50-通信0,37参考OP.123 我需要27,50和037 全部/1000.00/NR.00123456789/KOM。10.00/DAT.23.1230 我需要1000.00和1

我需要从一些字符串中提取和

我现在有这个

values = re.findall(r" \d*[.,]\d+", mystr)
我需要匹配所有十进制值,即使有一个“.”或“,”以区分欧洲和美国的千分之一。 以下是一些典型的字符串:

DERT-UID:123456 01 DD.2014-D C-12 BRUT:27,50-通信0,37参考OP.123

我需要27,50和037

全部/1000.00/NR.00123456789/KOM。10.00/DAT.23.1230

我需要1000.00和10.00

F 1047 DU 31.12.14

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

它也应该匹配“1000.00”或“1.000,00”,我现在没有示例,但将来可能会发生(或者我的正则表达式不够好,无法检测它们)


谢谢

您可以在python中使用这个基于查找的正则表达式:

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

  • (?![,.\d])
    断言此匹配后的下一个字符不是数字或点/逗号
  • (?断言此匹配后的上一个字符不是数字或点/逗号
    • 像这样的东西

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

      谢谢,但是美国的“1000.00”和UE的“1.000,00”怎么样?我进一步更新了代码/演示,看看这是否适合您。
      (?:(?!\1[,])\d+)+
      只需确保我们不将
      1000,00
      类型的值作为有效匹配进行匹配。它通过使用一个负向前看来实现,其中
      \1
      返回到第一个逗号或点。现在我遇到一个异常
      引发错误(“无法引用开放组”)
      您的站点是否使用了与re python模块不兼容的系统?让我检查并还原