从R中的字符串中删除选定的空格

时间:2019-03-13 14:23:18

标签: string rstudio str-replace gsub stringr

在某些时候,我确实想摆脱在PDF中获取的字符串中的空白,从而陷入了困境。

字符串如下:

[1] "                                      ZUSAMMEN          8 756    3 193       1 456        531         506       1 931    1 780        225      2 059"

正如您所看到的,我的问题是所有的“千位”都用空格分隔,而不是8756,而是8756。

我的问题是我只想自动删除数千个之间的空格。

我知道如何手动管理,但是我需要一种自动化的方法,因为我需要调整数千个观测值。

我尝试过的是:

c <- gsub("\\s", "", t) 

显示

[1] "ZUSAMMEN875631931456531506193117802252059"

但是,我不知道如何仅去除成千上万个数字之间的空格。

我希望一切都清楚了! 提前致谢, 尼克拉斯

1 个答案:

答案 0 :(得分:0)

您可以使用

x <- "                                      ZUSAMMEN          8 756    3 193       1 456        531         506       1 931    1 780        225      2 059"
gsub("(\\d) (\\d)", "\\1\\2", x)

请参见R demo online

要删除任何空格,请使用以下两个选项之一:

gsub("(\\d)[[:space:]](\\d)", "\\1\\2", x)
gsub("(\\d)\\s(\\d)", "\\1\\2", x)
gsub("(*UCP)(\\d)\\s(\\d)", "\\1\\2", x, perl=TRUE)
gsub("(*UCP)(?<=\\d)\\s(?=\\d)", "", x, perl=TRUE)

注释

  • (\\d) (\\d)匹配一个数字并将其捕获到捕获组1中(第一个(\\d)),然后匹配一个空格,然后将另一个数字捕获到组2中。如果替换模式中未使用相应的后向引用,则捕获并消耗的数字将被删除,因此"\\1\\2"替换字符串包含这些数字
  • [[:space:]]是与任何空白匹配的POSIX字符类,类似于\s
  • 如果您处理Unicode文本,则可以将PCRE regex(启用perl=TRUE)与\s(*UCP)动词一起使用(它将匹配软/硬空格等)。
  • 如果您使用(?<=\\d)后向和(?=\\d)前瞻而不是捕获组,则不会消耗文本(不会将文本添加到匹配值),因此不会删除文本,因此,不需要替换模式。