Замените все символы, кроме первого, в каждом слове строки строчными - PullRequest
0 голосов
/ 18 мая 2018

У меня есть строка

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 ]

0 голосов
/ 18 мая 2018

Есть красивый способ сделать это.Мы можем сделать один вызов 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."

Демо

0 голосов
/ 18 мая 2018

Однако должен быть какой-то симпатичный способ сделать это, один из способов - разделить каждое слово и опустить все символы слова, кроме первого, а затем 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."
...