Я имею дело с именами и пытаюсь сопоставить "First Last", но не "First Last Middle". Я думаю, что сложность заключается в том, что я хочу разрешить любые пробелы в конце, только не пробелы, за которыми следует что-либо еще. Вот что у меня есть:
^([^\s]+[\s]+)([^\s])$
Это почти сработает, но исключает «Первый последний» с пробелами в конце, и я хочу разрешить такой небрежный ввод данных.
Иногда в Фамилиях есть пробелы. Например, бывший игрок сборной Англии в крикет «Филип Де Фрейтас», поэтому вам, возможно, придется переосмыслить то, что вы пытаетесь сделать.





В конце шаблона ищите ноль или более пробелов, за которыми следует конец строки:
^(\S+\s+)(\S+)(?=\s*$)
https://regex101.com/r/PjGPAw/1
Также обратите внимание, что всякий раз, когда у вас есть набор символов только с одним токеном (например, \s), вы можете полностью удалить набор символов и просто использовать этот токен. Кроме того, отрицание \s (то есть набора символов [^\s]) эквивалентно \S, что означает «что угодно, кроме символа пробела», и, вероятно, предпочтительнее [^\s].
Что должно было произойти, если у человека было 2 или более имен в одном из имен? Честно спрашиваю .. не уверен, учел ли это ОП.
Можете ли вы привести пример строки для поиска и желаемых результатов? Если вы имеете дело с именами ... как узнать разницу между первым именем и вторым именем?