Замените все символы, кроме первого, в каждом слове строки строчными буквами.
У меня есть строка
text <- "This String IS a tESt. TRYING TO fINd a waY to do ThiS."
И я хотел бы использовать gsub в R, чтобы заменить все символы в каждом слове, которое не является первой буквой в нижнем регистре. Возможно ли это?
desired_output <- "This String Is a test. Trying To find a way to do This."
2 ответа:
Есть прекрасный способ сделать это. Мы можем сделать один вызов
gsub
в режиме Perl, воспользовавшись возможностью понизить регистр группы захвата.text <- "This String IS a tESt. TRYING TO fINd a waY to do ThiS." gsub("(?<=\\b.)(.*?)\\b", "\\L\\1", text, perl=TRUE) [1] "This String Is a test. Trying To find a way to do This."
Должен быть какой-то красивый способ сделать это, однако, один из способов состоит в том, чтобы разделить каждое слово и опустить все символы слова, кроме первого, а затем
paste
строку обратно.paste0(sapply(strsplit(text, " ")[[1]], function(x) paste0(substr(x, 1, 1),tolower(substr(x, 2, nchar(x))))), collapse = " ") #[1] "This String Is a test. Trying To find a way to do This."
Подробное пошаговое объяснение :
strsplit(text, " ")[[1]] #[1] "This" "String" "IS" "a" "tESt." "TRYING" "TO" "fINd" # [9] "a" "waY" "to" "do" "ThiS." sapply(strsplit(text, " ")[[1]], function(x) paste0(substr(x, 1, 1),tolower(substr(x, 2, nchar(x))))) # This String IS a tESt. TRYING TO fINd # "This" "String" "Is" "a" "test." "Trying" "To" "find" # a waY to do ThiS. # "a" "way" "to" "do" "This." paste0(sapply(strsplit(text, " ")[[1]], function(x) paste0(substr(x, 1, 1),tolower(substr(x, 2, nchar(x))))), collapse = " ") #[1] "This String Is a test. Trying To find a way to do This."