Как распознать любой до 2 миров после разных префиксов в предложении - PullRequest
0 голосов
/ 06 февраля 2019

Я знаю, что это не новый вопрос, но мне нужно сделать некоторую предварительную обработку и создать шаблон с REGEX, который заменяет / находит имена / фамилии после некоторых префиксов, таких как Dear John doe,, Dear Mr's John D!, Hi John, Hi Mr JohnHello John и т. Д.

Предположим, у меня в каждом предложении есть от 1 до 2 слов (имя / имя + фамилия), и в конце имени он может содержать запятую, но это не обязательно.

пример:

Hi Mr John, we are planning to go out

или

Hi Mr John we are planning to go out

должны быть изменены соответственно:

Hi Mr @name, we are planning to go out

или

Hi Mr @name we are planning to go out

Я пробовал до сих пор, но это не правильное решение, оно могло бы быть лучше.

((?i)Mr's|(?i)Mr|(?i)Hi|(?i)Dear)(/(\w+\s){1,}\w+[.?!]/)

regards

1 Ответ

0 голосов
/ 06 февраля 2019

Кажется, вы можете использовать

\b((?:\s*(?i:Mr(?:'s)?|Dear|Hi(?!,?\s*Mrs?\b)))+)\s+[A-Z]\w*(?:[\s-]+[A-Z]\w*)?

со следующей заменой:

$1 @name

См. Демонстрационную версию regex

Подробности

  • \b - граница слова
  • ((?:\s*(?i:Mr(?:'s)?|Dear|Hi(?!,?\s*Mrs?\b)))+) - Группа 1 (обозначается как $1 или \1 из шаблона замены), которая соответствует1 или более повторений следующей последовательности шаблонов:
    • \s* - 0+ пробелов
    • (?i:Mr(?:'s)?|Dear|Hi(?!,?\s*Mrs?\b)) - сопоставление группы модификаторов без учета регистра:
      • Mr(?:'s)?| -Mr и затем необязательную подстроку 's или
      • Dear| - подстроку Dear или
      • Hi(?!,?\s*Mrs?\b) - Hi, за которой не следует указывать дополнительную запятую, 0+ пробелов, Mr или Mrs как целых слов
  • \s+ - 1+ пробелов
  • [A-Z] -буква ASCII в верхнем регистре
  • \w* - 0+ символов слова (буквы, цифры, _, для сопоставления только букв ASCII используйте вместо [A-Za-z]*)
  • (?:[\s-]+[A-Z]\w*)? - необязательногруппа соответствует 1 или 0 появлений
    • [\s-]+ - 1 или более пробелов или -
    • [A-Z]\w* - заглавная буква ASCII и затем 0+ слова.
...