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

问题描述 投票:1回答:1

通过尝试摆脱我从PDF中获得的字符串中的一些空格,我真的陷入了困境。

该字符串如下所示:

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

正如你所看到的,我遇到的问题是所有“千”都用空格分隔,而不是8756,它是8 756。

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

我知道如何手动管理,但我需要一种自动化方式,因为我需要调整几千个观察值。

我试过的是:

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

揭示了

[1] "ZUSAMMEN875631931456531506193117802252059"

但是,我不知道如何只删除数千个数字之间的那些空格。

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

string rstudio str-replace gsub stringr
1个回答
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正则表达式(使用perl=TRUE启用)可以与\s(*UCP)动词一起使用(它将匹配软/硬空间等)
  • 如果使用(?<=\\d) lookbehind和(?=\\d) lookahead而不是捕获组,则不会消耗文本(不添加到匹配值)并且因此不会被删除,因此,不需要替换模式中的反向引用。
© www.soinside.com 2019 - 2024. All rights reserved.