在两种不同的情况下使用正则表达式

Use Regex in two different cases

我正在尝试使用 Python 3.7 通过使用正则表达式提取元素来识别 pdf 文档中的模式。当我提取数据时,我有两个疑惑:

首先是我得到的结果如下:

R.U.T .: 99.999.999-9
COMPANY
ELECTRONIC TICKET
Committed to you
N
54280631
COMPANY S.A. SALE
RUT: 99.999.999-9 Directory 111, City

而第二种情况是:

R.U.T .: 99.999.999-9
COMPANY
ELECTRONIC TICKET
Committed to you
N 54280631
COMPANY S.A. SALE
RUT: 99.999.999-9 Directory 111, City

我需要一个可以获取两种情况的正则表达式,以便使用 RegeX 获取发票编号。在这种情况下,发票编号为“N 54280631”。

我尝试了以下正则表达式,但它不适用于这两种情况之一。

([N]).*\n+([0-9])+.*\w+

知道正则表达式应该是什么样子才能得到那个结果吗?

您可以使用

(?m)^N\s+(\d+)$

详情:

  • (?m) - 使 ^$ 匹配 start/end 行位置
  • 的内联 re.M 修饰符
  • ^ - 行首
  • N - N 字符
  • \s+ - 一个或多个空格
  • (\d+) - 第 1 组:一个或多个数字
  • $ - 行尾。

参见regex demo

在 Python 中,您可以使用 re.findall 获取所有匹配项,或使用 re.search 仅获取第一个匹配项:

import re
text = 'Your_text_here'
pattern = r'^N\s+(\d+)$'
# First match:
m = re.search(pattern, text, re.M)
if m:
    print(m.group(1))

# Get all occurrences:
print( re.findall(pattern, text, re.M) )