假设我有一个像
这样的字符向量"Hi, this is a good time to start working together.".
我只想拥有
" Hi, this is a good time to start working together."
两个单词之间只有一个空格。我该怎么做R?
答案 0 :(得分:33)
gsub
是你的朋友:
test <- "Hi, this is a good time to start working together."
gsub("\\s+"," ",test)
#[1] "Hi, this is a good time to start working together."
\\s+
将匹配任何空格字符(空格,制表符等)或重复空格字符,并将其替换为单个空格" "
。
答案 1 :(得分:1)
另一个选项是字符串库中的压扁函数
library(stringr)
string <- "Hi, this is a good time to start working together."
str_squish(string)
#[1] ""Hi, this is a good time to start working together.""
答案 2 :(得分:0)
由于问题的标题是“删除多余的空格单词之间”,不触及前导和尾随空格,答案是(假设“单词”是非空白字符块)
gsub("(\\S)\\s{2,}(?=\\S)", "\\1 ", text, perl=TRUE)
stringr::str_replace_all(text, "(\\S)\\s{2,}(?=\\S)", "\\1 ")
## Or, if the whitespace to leep is the last whitespace in those matched
gsub("(\\S)(\\s){2,}(?=\\S)", "\\1\\2", text, perl=TRUE)
stringr::str_replace_all(text, "(\\S)(\\s){2,}(?=\\S)", "\\1\\2")
参见 regex demo #1 和 regex demo #2 和 this R demo。
正则表达式详情:
(\S)
- 捕获组 1(\1
从替换模式中引用此组值):非空白字符\s{2,}
- 两个或多个空白字符(在 Regex #2 中,它用括号括起来以形成 ID 为 2 (\2
) 的捕获组)(?=\S)
- 正向前瞻,需要在当前位置的右侧紧接一个非空白字符。