Регулярное выражение для сопоставления трех групп, последние две из которых имеют фиксированную длину - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть 3 подходящие группы в каждой строке, из которых я знаю длину двух последних.Таким образом, последний представляет собой трехбуквенный код (AZ), предыдущий - двухбуквенный код (AZ), а первый - строку неизвестной длины, которая также имеет пробелы и нелатинские символы.Мое регулярное выражение может соответствовать двум последним группам, но захватывает только последнее слово первой подходящей группы:

([\p{L}]*)\s*([A-Z]{2})\s*([A-Z]{3})\s*

Это строки:

Afghanistan AF AFG
Åland Islands AX ALA
Albania AL ALB
Algeria DZ DZA
American Samoa AS ASM
British Indian Ocean Territory IO IOT

Если я расширяю первую подходящую группучтобы также включить пробелы, тогда все в этой группе.

Любая гепатит ценится.

1 Ответ

1 голос
/ 11 апреля 2019

Вы получаете только последнее слово, потому что класс символов не соответствует пробелу между словами.

Вы можете решить эту проблему, добавив пробел к классу символов ([\p{L} ]*) demo

Если вы хотите, чтобы слова без последнего пробела и комбинации букв 2 и 3 всегда были в конце, вы можете сделать первые \ s необязательными, удалив звездочку или используя \s+:

([\p{L} ]*)\s([A-Z]{2})\s*([A-Z]{3})\s*

Regex demo

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...