string - 从R中的字符串中删除选定的空格
问题描述
通过尝试摆脱从 PDF 获得的字符串中的一些空格,我真的陷入了困境。
字符串如下所示:
[1] " ZUSAMMEN 8 756 3 193 1 456 531 506 1 931 1 780 225 2 059"
如您所见,我遇到的问题是所有“千”都用空格分隔,即 8 756 而不是 8756。
我的问题是我只想自动删除数千之间的空格。
我知道如何手动管理它,但我需要一种自动化的方式,因为我有几千个观察值需要调整。
我尝试的是:
c <- gsub("\\s", "", t)
揭示
[1] "ZUSAMMEN875631931456531506193117802252059"
但是,我不知道如何只摆脱千位数之间的那些空格。
我希望一切都清楚!提前致谢, 尼克拉斯
解决方案
您可以使用
x <- " ZUSAMMEN 8 756 3 193 1 456 531 506 1 931 1 780 225 2 059"
gsub("(\\d) (\\d)", "\\1\\2", x)
在线查看R 演示。
要删除任何空格,请使用以下两者之一:
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 而不是捕获组,则文本不会被消耗(不会添加到匹配值)并且不会因此被删除,因此在替换模式中不需要反向引用。
推荐阅读
- swift - 使用 alamofire 的顺序上传/串行队列
- java - 单元测试依赖于另一个服务类的 Spring Boot 服务类
- php - How to get correct post_count and found_posts within include file
- ios - 如何在swift 5中的表格视图中添加列表项
- java - 使用 MVC 进行 java spring juint 测试(@EnableWebMvc 包含在配置中)
- stm32 - DMA1 不适用于 stm32f103c8 中的 USART1?
- javascript - 在 Promise.all 中无法获取错误
- algorithm - 如何解决这个算法问题 - Gopher 2
- java - 如何将多行信息发送到 telnet/AS400 主机并以 Java 中的结构化格式读取结果屏幕
- amazon-web-services - 如何在 CloudFormation 中引用默认 VPC?