【问题标题】:Use Regex in two different cases在两种不同的情况下使用正则表达式
【发布时间】:2021-07-13 22:53:47
【问题描述】:

我正在尝试使用 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) 是多行吗?

标签: python regex expression regex-lookarounds


【解决方案1】:

你可以使用

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

详情

  • (?m) - 一个内联 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) )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多