![Извлечение первой буквы имени и всей фамилии](https://rvso.com/image/1595497/%D0%98%D0%B7%D0%B2%D0%BB%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BF%D0%B5%D1%80%D0%B2%D0%BE%D0%B9%20%D0%B1%D1%83%D0%BA%D0%B2%D1%8B%20%D0%B8%D0%BC%D0%B5%D0%BD%D0%B8%20%D0%B8%20%D0%B2%D1%81%D0%B5%D0%B9%20%D1%84%D0%B0%D0%BC%D0%B8%D0%BB%D0%B8%D0%B8.png)
Мне нужно использовать Regex, чтобы получить первую букву имени пользователя, а также всю фамилию. То, что у меня есть в настоящее время, хорошо работает для пользователей с двумя именами, но код не работает, когда включено третье имя.
Вот что у меня сейчас есть:^(.)[^ ]* (\w+)$
Работает на:
- Том Джонс → TJones.
Не работает для:
- Том Смит Джонс. Он должен вернуть ТиДжонса.
Кроме того, я бы хотел иметь возможность исключить любые специальные символы из фамилии — должны быть только буквы алфавита.
ОБНОВЛЕНИЕ: нашел этот код в другом посте (\w).*(\s+\w+)$
этот код позволяет получить первый символ и последнее слово, но не удаляет пробел.
Пример: Том Майк Эндрю Джонс -> Т. Джонс вместо Т. Джонс.
Затем я обновил это до (\w).*(\s+)(\w+)$, и это работает безупречно. Теперь мне осталось выяснить, как игнорировать специальные символы для фамилий, например, Пьер-Луи.
Кто-нибудь из вас, эксперт по регулярным выражениям, знает способ игнорировать специальные символы?
решение1
Вы можете изменить регулярное выражение на следующее:
(\w).*\W+(\w+)$
вместо \s
user \W
(заглавная буква W), которая соответствует любым символам, не являющимся словами.