删除空白,条件为R中出现的次数

问题描述 投票:3回答:2

我想从字符串中除去空白,而2个非空白字符 单词之间的连续空白数目小于某个数目。

例如,

a <- c("I want            only                <5                         white-spaces   removed")

我知道我可以使用gsub(' ', '', a)删除所有空格。但是,仅当总空格小于5时,我才想删除两个非空格字符 words之间的空格。所以我想要以下内容

a_adj <- c("Iwant             only                <5                         white-spacesremoved")

我尝试过此gsub('{,5} ', '', a)。但它仍会删除所有空白。有人可以帮忙吗?

谢谢

r regex whitespace gsub
2个回答
4
投票

您可以使用

a_adj <- gsub("(?<=\\S)\\s{1,4}(?=\\S)", "", a, perl=TRUE)

请参见regex demoR demo

(?<=\S)\s{1,4}(?=\S)仅在任何非空白字符之间匹配1至4个空白。

详细信息

  • (?<=\S)-正向后看,要求在当前位置的左侧紧跟一个非空白字符
  • \s{1,4}-1至4个空格字符
  • (?=\S)-正向超前,需要在当前位置的右边紧跟一个非空白字符。

3
投票

使用str_remove_all

library(stringr)
str_remove_all(a, "\\s{1,4}(?! )")
© www.soinside.com 2019 - 2024. All rights reserved.