web-dev-qa-db-fra.com

Fusionner plusieurs espaces en un seul espace; supprimer les espaces de fin/de début

Je souhaite fusionner plusieurs espaces en un seul espace (l'espace pourrait également être une tabulation) et supprimer les espaces de fin/suivants.

Par exemple...

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

à

"Hi buddy what's up bro"

J'ai vérifié la solution donnée à Regex pour remplacer plusieurs espaces par un seul espace . Notez que ne mettez pas\t ou\n comme espace exact à l'intérieur de la chaîne de jouets et ne l'alimentez pas comme motif dans gsub. Je veux que dans R.

Notez que je suis incapable de mettre plusieurs espaces dans la chaîne de jouets . Merci 

47
chandresh

Cela semble répondre à vos besoins.

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

Une autre approche utilisant une seule expression régulière:

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

Explication ( de )

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

Ou essayez simplement la fonction squish de stringr

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

La qdapRegex a la fonction rm_white pour gérer ceci:

library(qdapRegex)
rm_white(string)

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

Il n'est pas nécessaire d'importer des bibliothèques externes pour effectuer une telle tâche:

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

Ou, en une ligne:

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

Beaucoup plus propre.

4
Adam Erickson

Vous pouvez également essayer clean à partir de qdap

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

Ou comme suggéré par @Tyler Rinker (en utilisant seulement qdap)

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

Une autre solution utilisant strsplit:

Fractionner du texte en mots, puis concaténer des mots simples à l’aide de la fonction Coller.

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

Pour plus d'un 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 

0
Sam S

À cette fin, il n'est pas nécessaire de charger des bibliothèques supplémentaires car le gsub() du package Base r fait le travail.
Pas besoin de se souvenir de ces bibliothèques supplémentaires. Supprimez les espaces blancs de début et de fin avec trimws() et remplacez les espaces blancs supplémentaires à l'aide de gsub() comme indiqué par @Ad Erickson. 

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

Ici, \\s+ correspond à un ou plusieurs espaces et gsub le remplace par un seul espace.

Pour savoir ce que fait une expression régulière, visitez le link mentionné par @Tyler Rinker.
Il vous suffit de copier et coller l’expression rationnelle pour savoir ce qu’elle fait et this fera le reste.

0
heisenbug47