Подтвердить что ты не робот

Объединение нескольких пространств в одно пространство; удалить задние/ведущие пробелы

Я хочу объединить несколько пробелов в одно пространство (пробел также может быть вкладкой) и удалить конечные/ведущие пробелы.

Например...

string <- "Hi        buddy        what up    Bro" 

к

"Hi buddy what up bro"

Я проверил решение, данное в Regex, чтобы заменить несколько пробелов на одно пространство. Обратите внимание, что не помещайте \t или\n как точное пространство внутри игрушечной строки и кормите это как шаблон в gsub. Я хочу, чтобы в R.

Обратите внимание, что я не могу разместить много места в игрушечной строке. Спасибо

4b9b3361

Ответ 1

Это похоже на ваши потребности.

string <- "  Hi buddy   what up   Bro "
library(stringr)
str_replace(gsub("\\s+", " ", str_trim(string)), "B", "b")
# [1] "Hi buddy what up bro"

Ответ 2

Другой подход с использованием одного регулярного выражения:

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

Ответ 3

Или просто попробуйте функцию squish из stringr

library(stringr)
string <- "  Hi buddy   what up   Bro "
str_squish(string)
# [1] "Hi buddy what up Bro"

Ответ 4

Вам не нужно импортировать внешние библиотеки для выполнения такой задачи:

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))

Много чище.

Ответ 5

qdapRegex имеет функцию rm_white для обработки:

library(qdapRegex)
rm_white(string)

## [1] "Hi buddy what up Bro"

Ответ 6

Вы также можете попробовать 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"

Ответ 7

Для этого не нужно загружать дополнительные библиотеки, так как gsub() пакета Base r делает свою работу.
Не нужно помнить эти дополнительные библиотеки. Удалите начальные и конечные пробелы с помощью trimws() и замените лишние пробелы с помощью gsub(), как упомянуто @Adam Erickson.

    'string = " Hi        buddy        what up    Bro "
     trimws(gsub("\\s+", " ", string))'

Здесь \\s+ соответствует одному или нескольким пробелам, а gsub заменяет его одним пробелом.

Чтобы узнать, что делает любое регулярное выражение, перейдите по этой ссылке, как упомянуто @Tyler Rinker.
Просто скопируйте и вставьте регулярное выражение, которое вы хотите знать, что оно делает, и это сделает все остальное.

Ответ 8

Другое решение с использованием 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 = " "))

enter image description here