首页 > 解决方案 > 正则表达式仅匹配第二个条目

问题描述

我需要一个匹配所有个体企业家姓名的正则表达式。所以,我写了下一个:

((?i)индивидуальный предприниматель|ип) [А-Я][а-я]+ [А-Я](\.|[а-я]+) [А-Я](\.|[а-я]+)

在文本中:

Индивидуальный предприниматель Шаладко Пётр Владиславович, именуемый в дальнейшем “Арендодатель”。и индивидуальный предприниматель Сергеев Денис Александрович, действующий на основании Свидетельства, именуемый в дальнейшем "Арендатор", заключили настоящий договор о нижеследующем:

我的表达式只匹配一个条目:

индивидуальный предприниматель Сергеев Денис Александрович

忽略

Индивидуальный предприниматель Шаладко Пётр Владиславович

为什么会这样?我错过了哪里?

标签: pythonregex

解决方案


俄语字母表包含 33 个字母,其中一个ё/Ё不属于а-яandА-Я范围。将它们添加到字符类中:

(?i)(?:индивидуальный предприниматель|ип) [А-ЯЁ][а-яё]+ [А-ЯЁ](?:\.|[а-яё]+) [А-ЯЁ](?:\.|[а-яё]+)

请参阅正则表达式演示。我还使用非捕获组来提取仅与re.findall.

如果您只需要提取名称,请使用捕获组 ( ([А-ЯЁ][а-яё]+ [А-ЯЁ](?:\.|[а-яё]+) [А-ЯЁ](?:\.|[а-яё]+))) 包装正则表达式模式的该部分:

re.findall(r'(?i)(?:индивидуальный предприниматель|ип) ([А-ЯЁ][а-яё]+ [А-ЯЁ](?:\.|[а-яё]+) [А-ЯЁ](?:\.|[а-яё]+))', text)

看到这个正则表达式演示

Python演示

import re
text = 'Индивидуальный предприниматель Шаладко Пётр Владиславович, именуемый в дальнейшем "Арендодатель". и индивидуальный предприниматель Сергеев Денис Александрович, действующий на основании Свидетельства, именуемый в дальнейшем "Арендатор", заключили настоящий договор о нижеследующем:'
rx = re.compile(r'(?:индивидуальный предприниматель|ип) ([А-ЯЁ][а-яё]+ [А-ЯЁ](?:\.|[а-яё]+) [А-ЯЁ](?:\.|[а-яё]+))', re.I)
print(rx.findall(text))

输出:['Шаладко Пётр Владиславович', 'Сергеев Денис Александрович']


推荐阅读