GNU R: Как да премахнете повтарящи се знаци в началото и края на всяка дума от низ?

В GNU R трябва да премахна повтарящи се знаци в началото и края на всяка дума от низ.

В случай, че имам информация

str <- "Tthis iss a splendiddd ddayyy"

Резултатът трябва да бъде

"This is a splendid day"

Някой знае ли как се прави това? Благодаря много предварително !

С най-добри пожелания, Ерик


person user3771059    schedule 06.03.2018    source източник
comment
Добре дошли в Stack Overflow. Моля, покажете последния си неработещ опит за решаване на този проблем. Обикновено е по-поучително да видите поправки на вашия код, отколкото да прочетете решението на някой друг. Вижте stackoverflow.com/help/how-to-ask   -  person Spangen    schedule 06.03.2018
comment
Можете да използвате gsub(). Намерете повече информация тук: stackoverflow.com/questions/11164667/   -  person ecp    schedule 06.03.2018
comment
Мисля, че използването на правилния pattern в gsub() трябва да реши проблема (perlmonks.org/?node_id=353072 може да е от полза)   -  person niko    schedule 06.03.2018
comment
Можете да използвате gsub(). Намерете повече информация тук: stackoverflow.com/questions/11164667/   -  person ecp    schedule 06.03.2018
comment
Загрижени ли сте за премахването на дубликати, когато трябва да са там? Например: лама, тиня, всички, малки, хапче, копър, топка, също, пас, трева и т.н.   -  person Dason    schedule 06.03.2018
comment
Здравейте! Благодаря ви много за вашия принос! Трябва да направя това за текст на френски. В този език истинските думи, започващи или завършващи с двойни букви, са изключително необичайни. Сещам се само за зоопарк. Благодаря отново!   -  person user3771059    schedule 06.03.2018


Отговори (1)


Първият gsub премахва дублиращите се начални знаци, а вторият - крайните. Първият регулярен израз съвпада с граница на думата, последвана от произволен знак, последван от същия символ, евентуално повторен. След това заменя съвпадението със знака, съпоставен от групата за улавяне, т.е. частта в скобите. Главните или малките букви се игнорират. Вторият работи по подобен начин за последващи дубликати.

ss <- gsub("\\b(.)\\1+", "\\1", str, ignore.case = TRUE, perl = TRUE)
gsub("(.)\\1+\\b", "\\1", ss)
## [1] "This is a splendid day"
person G. Grothendieck    schedule 06.03.2018