web-dev-qa-db-ja.com

複数のスペースを単一のスペースにマージします。末尾/先頭のスペースを削除する

複数のスペースを単一のスペースにマージし(スペースもタブにすることができます)、末尾/先頭のスペースを削除します。

例えば...

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

"Hi buddy what's up bro"

複数のスペースを単一のスペースに置き換える正規表現 で指定されたソリューションを確認しました。おもちゃの文字列内に正確なスペースとして\ tまたは\ nを入れて、gsubのパターンとしてフィードしないでください。 Rでそれが欲しい.

おもちゃの文字列に複数のスペースを入れることができないことに注意してください。ありがとう

53
chandresh

これはあなたのニーズを満たすようです。

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"
54
Rich Scriven

単一の正規表現を使用する別のアプローチ:

gsub("(?<=[\\s])\\s*|^\\s+|\\s+$", "", string, Perl=TRUE)

説明( from

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
30
Tyler Rinker

または、単にsquishからstringr関数を試してください

> library(stringr)
> string <- "  Hi buddy   what's up   Bro "
> str_squish(string)
[1] "Hi buddy what's up Bro"
25
Henrik

このようなタスクを実行するために外部ライブラリをインポートする必要はありません。

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

または、1行で:

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

ずっときれい。

7
Adam Erickson

qdapRegexにはrm_whiteこれを処理する関数:

library(qdapRegex)
rm_white(string)

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

cleanからqdapを試すこともできます

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

または@Tyler Rinkerが示唆するように(qdapのみを使用)

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

Strsplitを使用する別のソリューション:

テキストを単語に分割し、貼り付け機能を使用して単一の単語を連結します。

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

複数のドキュメントの場合:

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

0
Sam S

この目的のために、Base rパッケージのgsub()が機能するため、追加のライブラリをロードする必要はありません。
追加のライブラリを覚えておく必要はありません。 @Adam Ericksonが述べたように、先頭の空白と末尾の空白をtrimws()で削除し、gsub()を使用して余分な空白を置き換えます。

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

ここに \\s+は1つ以上の空白に一致し、gsubは単一の空白に置き換えます。

正規表現が何をしているのかを知るには、@-Tyler Rinkerが述べたように link にアクセスしてください。
何をしているかを知りたい正規表現をコピーして貼り付けるだけで、あとは this で処理されます。

0
heisenbug47