Вот базовый подход R с использованием gsub
:
x <- c("Peter Parker", "Hawk & Dove", "J Jonah Jameson", "3JPX spo", "Bruce Wayne")
output <- gsub("\\s+(\\S)\\S*(?!\\S)", "\\1", x, perl=TRUE)
output
[1] "PeterP" "Hawk&D" "JJJ" "3JPXs" "BruceW"
Шаблон регулярного выражения \s+(\S)\S*(?!\S)
соответствует одному или нескольким пробельным символам, затем сопоставляет и захватывает первый символ компонента имени. Он также потребляет оставшуюся часть компонента name, заменяя только захваченный первый символ.
В случае, если вышеизложенное все еще неясно для вас, вот как работает шаблон регулярного выражения, шаг за шагом:
\s+ match one or more space characters
(\S) then match AND capture the first character of the name-word
\S* match the remainder of the name-word
(?!\S) assert that what follows the end of the name-word is either a space
or the end of the string
Замена в вызове gsub
- это просто \1
, который является первой и единственной группой захвата, соответствующей первой букве каждого имени, за исключением самого первого имени.