#regex #match
Вопрос:
Мне нужно регулярное выражение, чтобы возвращать ровно три СОВПАДЕНИЯ (не группы) для некоторых входных строк имен, которые могут быть отформатированы любым из следующих способов:
Last First Middle
LAST First Middle
Last FirstMiddle
LAST FirstMiddle
LastFirst Middle
LASTFirst Middle
LastFirstMiddle
LASTFirstMiddle
До сих пор я работал над этим: ([A-Z]{2,})?([A-Z][a-z]*)
Он правильно возвращает три СОВПАДЕНИЯ для всех сценариев, кроме «LASTFirstMiddle» и «LASTFirst Middle», когда фамилия пишется с заглавной буквы и объединяется с именем.
Важно, чтобы результат давал три МАТЧА, а не группы.
Пожалуйста, не могли бы вы предложить регулярное выражение, которое могло бы это поддержать? Спасибо.
Ответ №1:
Вы можете использовать
[A-Z]{2,}(?=[A-Z][a-z]|b)|[A-Z][a-z]*
Смотрите демонстрацию регулярных выражений. Подробные сведения:
[A-Z]{2,}(?=[A-Z][a-z]|b)
— две или более прописных буквы ASCII, за которыми следует заглавная буква ASCII, а затем строчная буква ASCII или граница слова|
— или[A-Z][a-z]*
— буква ASCII в верхнем регистре, а затем ноль или более строчных букв ASCII.
Комментарии:
1. Спасибо, Виктор — оба варианта отлично работают и являются отличным решением — Спасибо и вам за объяснение. Это очень поможет!