Ответ 1
Это похоже на ваши потребности.
string <- " Hi buddy what up Bro "
library(stringr)
str_replace(gsub("\\s+", " ", str_trim(string)), "B", "b")
# [1] "Hi buddy what up bro"
Я хочу объединить несколько пробелов в одно пространство (пробел также может быть вкладкой) и удалить конечные/ведущие пробелы.
Например...
string <- "Hi buddy what up Bro"
к
"Hi buddy what up bro"
Я проверил решение, данное в Regex, чтобы заменить несколько пробелов на одно пространство. Обратите внимание, что не помещайте \t или\n как точное пространство внутри игрушечной строки и кормите это как шаблон в gsub
. Я хочу, чтобы в R.
Обратите внимание, что я не могу разместить много места в игрушечной строке. Спасибо
Это похоже на ваши потребности.
string <- " Hi buddy what up Bro "
library(stringr)
str_replace(gsub("\\s+", " ", str_trim(string)), "B", "b")
# [1] "Hi buddy what up bro"
Другой подход с использованием одного регулярного выражения:
gsub("(?<=[\\s])\\s*|^\\s+|\\s+$", "", string, perl=TRUE)
Объяснение (из)
NODE EXPLANATION
--------------------------------------------------------------------------------
(?<= look behind to see if there is:
--------------------------------------------------------------------------------
[\s] any character of: whitespace (\n, \r,
\t, \f, and " ")
--------------------------------------------------------------------------------
) end of look-behind
--------------------------------------------------------------------------------
\s* whitespace (\n, \r, \t, \f, and " ") (0 or
more times (matching the most amount
possible))
--------------------------------------------------------------------------------
| OR
--------------------------------------------------------------------------------
^ the beginning of the string
--------------------------------------------------------------------------------
\s+ whitespace (\n, \r, \t, \f, and " ") (1 or
more times (matching the most amount
possible))
--------------------------------------------------------------------------------
$ before an optional \n, and the end of the
string
Или просто попробуйте функцию squish
из stringr
library(stringr)
string <- " Hi buddy what up Bro "
str_squish(string)
# [1] "Hi buddy what up Bro"
Вам не нужно импортировать внешние библиотеки для выполнения такой задачи:
string <- " Hi buddy what up Bro "
string <- gsub("\\s+", " ", string)
string <- trimws(string)
string
[1] "Hi buddy what up Bro"
Или в одну строку:
string <- trimws(gsub("\\s+", " ", string))
Много чище.
qdapRegex
имеет функцию rm_white
для обработки:
library(qdapRegex)
rm_white(string)
## [1] "Hi buddy what up Bro"
Вы также можете попробовать clean
от qdap
library(qdap)
library(stringr)
str_trim(clean(string))
#[1] "Hi buddy what up Bro"
Или, как предложено @Tyler Rinker (используя только qdap
)
Trim(clean(string))
#[1] "Hi buddy what up Bro"
Для этого не нужно загружать дополнительные библиотеки, так как gsub()
пакета Base r делает свою работу.
Не нужно помнить эти дополнительные библиотеки.
Удалите начальные и конечные пробелы с помощью trimws()
и замените лишние пробелы с помощью gsub()
, как упомянуто @Adam Erickson.
'string = " Hi buddy what up Bro "
trimws(gsub("\\s+", " ", string))'
Здесь \\s+
соответствует одному или нескольким пробелам, а gsub
заменяет его одним пробелом.
Чтобы узнать, что делает любое регулярное выражение, перейдите по этой ссылке, как упомянуто @Tyler Rinker.
Просто скопируйте и вставьте регулярное выражение, которое вы хотите знать, что оно делает, и это сделает все остальное.
Другое решение с использованием strsplit:
Разделение текста на слова, а затем объединение отдельных слов с помощью функции вставки.
string <- "Hi buddy what up Bro"
stringsplit <- sapply(strsplit(string, " "), function(x){x[!x ==""]})
paste(stringsplit ,collapse = " ")
Для более чем одного документа:
string <- c("Hi buddy what up Bro"," an example using strsplit ")
stringsplit <- lapply(strsplit(string, " "), function(x){x[!x ==""]})
sapply(stringsplit ,function(d) paste(d,collapse = " "))