Добавление пробела в определенной позиции в строке прописных и строчных букв
Уважаемые пользователи stackoverflow,
Многие люди сталкиваются с ситуациями, в которых им нужно изменить строки. Я видел многих. сообщения, связанные с модификацией строк. Но, я не наткнулся на решения, которые я ищу для. Я считаю, что мой пост будет полезен для некоторых других пользователей R, которые столкнутся с подобным проблемы. Я хотел бы обратиться за помощью к пользователям R, которые знакомы со строкой модификация.
Я пытался изменить строку, такую как следующий.
x <- "Marcus HELLNERJohan OLSSONAnders SOEDERGRENDaniel RICHARDSSON"
В этой строке есть четыре человека. Фамилии пишутся заглавными буквами. Три из четырех фамилий остаются в кусках с именами (например, HELLNERJohan). Я хочу отделить фамилии и имена, добавив пробел (например, HELLNER Johan).
Я думаю, что мне нужно сказать что-то вроде " выберите последовательности прописных букв, и добавьте пробел между последней и предпоследней прописными буквами, если есть строчные письма следующие."
Следующий пост, вероятно, несколько релевантен, но я еще не преуспел в написании кодов.
Большое спасибо за вашу щедрую поддержку.2 ответа:
Это работает путем нахождения и захвата двух последовательных подшаблонов, первый из которых состоит из одной прописной буквы (конец фамилии), а следующий состоит из верхней, а затем строчной буквы (взятой для обозначения начала имени). Везде, где эти две группы находятся, они захватываются и заменяются сами собой пробелом, вставленным между ними (
"\\1 \\2"
в вызове ниже).x <- "Marcus HELLNERJohan OLSSONAnders SOEDERGRENDaniel RICHARDSSON" gsub("([[:upper:]])([[:upper:]][[:lower:]])", "\\1 \\2", x) # "Marcus HELLNER Johan OLSSON Anders SOEDERGREN Daniel RICHARDSSON"
Если вы хотите разделить вектор на вектор имен, это разбивает строку с помощью регулярного выражения с утверждениями lookbehind и lookahead нулевой ширины.
strsplit(x, split = "(?<=[[:upper:]])(?=[[:upper:]][[:lower:]])", perl = TRUE)[[1]] # [1] "Marcus HELLNER" "Johan OLSSON" "Anders SOEDERGREN" # [4] "Daniel RICHARDSSON"