IT박스

여러 공간을 단일 공간으로 병합합니다.

itboxs 2020. 12. 29. 06:50
반응형

여러 공간을 단일 공간으로 병합합니다. 후행 / 선행 공백 제거


여러 공백을 단일 공백으로 병합하고 (공백도 탭이 될 수 있음) 후행 / 선행 공백을 제거하고 싶습니다.

예를 들면 ...

string <- "Hi        buddy        what's up    Bro" 

...에

"Hi buddy what's up bro"

여러 공백을 단일 공백으로 대체하기 위해 Regex에서 제공된 솔루션을 확인했습니다 . 장난감 문자열 내부에 \ t 또는 \ n을 정확한 공간으로 입력하지 말고 gsub. R에서 원합니다.

장난감 끈에 여러 공간을 넣을 수 없습니다. 감사


이것은 귀하의 요구를 충족시키는 것 같습니다.

string <- "  Hi buddy   what's up   Bro "
library(stringr)
str_replace(gsub("\\s+", " ", str_trim(string)), "B", "b")
# [1] "Hi buddy what's 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's up   Bro "
str_squish(string)
# [1] "Hi buddy what's up Bro"

이러한 작업을 수행하기 위해 외부 라이브러리를 가져올 필요는 없습니다.

string <- " Hi        buddy        what's up    Bro "
string <- gsub("\\s+", " ", string)
string <- trimws(string)
string
[1] "Hi buddy what's up Bro"

또는 한 줄로 :

string <- trimws(gsub("\\s+", " ", string))

훨씬 더 깨끗합니다.


qdapRegexrm_white이 처리하는 기능 :

library(qdapRegex)
rm_white(string)

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

You could also try clean from qdap

library(qdap)
library(stringr)
str_trim(clean(string))
#[1] "Hi buddy what's up Bro"

Or as suggested by @Tyler Rinker (using only qdap)

Trim(clean(string))
#[1] "Hi buddy what's up Bro"

For this purpose no need to load any extra libraries as the gsub() of Base r package does the work.
No need to remember those extra libraries. Remove leading and trailing white spaces with trimws() and replace the extra white spaces using gsub() as mentioned by @Adam Erickson.

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

Here \\s+ matches one or more white spaces and gsub replaces it with single space.

To know what any regular expression is doing, do visit this link as mentioned by @Tyler Rinker.
Just copy and paste the regular expression you want to know what it is doing and this will do the rest.


Another solution using strsplit:

Splitting text into words, and, then, concatenating single words using paste function.

string <- "Hi        buddy        what's up    Bro" 
stringsplit <- sapply(strsplit(string, " "), function(x){x[!x ==""]})
paste(stringsplit ,collapse = " ")

For more than one document:

string <- c("Hi        buddy        what's 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

ReferenceURL : https://stackoverflow.com/questions/25707647/merge-multiple-spaces-to-single-space-remove-trailing-leading-spaces

반응형