Как избежать строки на основе префикса с помощью регулярного выражения - PullRequest
1 голос
/ 14 июня 2019

Я использую регулярное выражение для идентификации имен из файла студента. Имена содержат префикс, такой как «MR» или «MRS», или нет имени только префикса, например, «MR GEORGE 51» или «MRS GEORGE 52» или «GEORGE 53». Я хочу извлечь 53 только из «GEORGE 53» из этих трех (последний), что означает, что «MR GEORGE 51» или «MRS GEORGE 52» не должны прийти. Примечание: цифры могут быть изменены, его возраст.

Я знаю о регулярном выражении, и я пробовал такие шаблоны, как '[^ M] [^ R]' '[^ M] [^ R] [^ S]', чтобы определить и извлечь возраст, только когда нет «MR» или «MRS» должен быть префиксом в строке. Я понимаю, что с помощью программы на Python я могу достичь этого с помощью некоторых условий, но я хочу знать, есть ли регулярные выражения, доступные для того же самого.

1 Ответ

1 голос
/ 14 июня 2019

Шаблон [^M][^R] соответствует любому символу, кроме M, за которым следует любой символ, кроме R.Таким образом, вы можете отклонить действительные совпадения, например, SR или ME.

Вы можете использовать

re.findall(r'\b(?<!\bmr\s)(?<!\bmrs\s)\S+\s+\d{1,2}\b', text, re.I)

См. Демонстрационную версию regex ,Чтобы взять имя и возраст в отдельные элементы кортежа, запишите их:

re.findall(r'\b(?<!\bmr\s)(?<!\bmrs\s)(\S+)\s+(\d{1,2})\b', text, re.I)

Подробности

  • \b - граница слова
  • (?<!\bmr\s) - без mr + пробел перед текущим местоположением
  • (?<!\bmrs\s) - без mrs + пробел прямо перед текущим местоположением
  • (\S+) - Группа 1: одинили более непробельных символов
  • \s+ - 1+ пробелов
  • (\d{1,2}) - Группа 2: одна или две цифры
  • \b - граница слова

Модификатор re.I является регистронезависимым.

Python demo :

import re
text="for an example 'MR GEORGE 51' or 'MRS GEORGE 52' or 'GEORGE 53'"
print(re.findall(r'\b(?<!\bmr\s)(?<!\bmrs\s)\S+\s+\d{1,2}\b', text, re.I))
# => ['GEORGE 53']
print(re.findall(r'\b(?<!\bmr\s)(?<!\bmrs\s)(\S+)\s+(\d{1,2})\b', text, re.I))
# => [('GEORGE', '53')]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...