在两种不同的情况下使用正则表达式
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) )
我正在尝试使用 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 行位置 的内联 ^
- 行首N
-N
字符\s+
- 一个或多个空格(\d+)
- 第 1 组:一个或多个数字$
- 行尾。
re.M
修饰符
参见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) )