首页 > 解决方案 > 正则表达式-如何解释数字之间没有空格

问题描述

我正在尝试从包含大量财务信息的 pdf 文档中抓取数据。我是使用正则表达式的初学者,但我能够找到我专门寻找的数以亿计的数字。但是,该数字的结尾和下一个数字的开头之间没有空格,所以我很难不包括下一个数字。

这是我得到的结果:

['183,662,7203.004.00']

我要抓取的数字是 183,662,720,但正如您所见,由于没有空间,它正在捕获之后的数字。

我使用的代码是re.findall('\(line 1 minus line 2\)(\d.+?)Less',y). 我将把它用于本文档的其他版本,其中可能有数万到数十亿的数字。所以这也使这有点复杂。

任何帮助将不胜感激,谢谢!

标签: pythonregexre

解决方案


如果你想使用整个模式,你可以使用:

\(line 1 minus line 2\)(\d{1,3}(?:,\d{3})*)\d*(?:\.\d+)* Less\b

模式匹配:

  • \(line 1 minus line 2\)匹配(line 1 minus line 2)
  • (捕获组 1
    • \d{1,3}(?:,\d{3})*匹配 1+ 位可选地由 a,和 3 位重复的数字
  • )关闭组 1
  • \d*(?:\.\d+)*匹配可选数字,可选后跟匹配 a.和数字
  • Less\b匹配 Less后跟单词边界以防止部分匹配

正则表达式演示| Python 演示

例如

import re

y = r"This is (line 1 minus line 2)183,662,7203.004.00 Less test"
print(re.findall(r"\(line 1 minus line 2\)(\d{1,3}(?:,\d{3})*)\d*(?:\.\d+)* Less\b" ,y))

输出

['183,662,720']

推荐阅读