关于r:将多个空格合并到单个空间;

Merge Multiple spaces to single space; remove trailing/leading spaces

我想将多个空格合并为单个空格(空格也可以是制表符)并删除尾随空格/前导空格。

例如。。。

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

1
"Hi buddy what's up bro"

我检查了regex给出的解决方案,用一个空格替换多个空格。请注意,不要在玩具串中放置 或那样精确的空间,并将其作为gsub中的模式输入。我要在R.

请注意,我不能在玩具串中放置多个空间。谢谢


这似乎能满足你的需要。

1
2
3
4
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"


使用单个regex的另一种方法:

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

解释(自)

4


或者简单地从stringr中尝试squish功能。

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

执行此任务不需要导入外部库:

1
2
3
4
5
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))

干净多了。


qdapRegex具有rm_white功能来处理:

1
2
3
4
library(qdapRegex)
rm_white(string)

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

你也可以试试qdapclean

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

或者按照@tyler rinker的建议(仅使用qdap)

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


使用strsplit的另一个解决方案:

将文本拆分为单词,然后使用粘贴函数连接单个单词。

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

对于多个文档:

1
2
3
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


为此,不需要加载任何额外的库,因为base r包的gsub()可以完成这项工作。不需要记住那些额外的库。用trimws()删除前导空格和尾随空格,并使用@adam erickson提到的gsub()替换多余的空格。

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

这里,\\s+匹配一个或多个空格,gsub用单个空格替换它。

要知道任何正则表达式都在做什么,请访问@tyler rinker提到的链接。只需复制并粘贴您想要知道它在做什么的正则表达式,其余的就可以了。