【问题标题】:Remove white spaces between letters [A-Za-z]删除字母之间的空格 [A-Za-z]
【发布时间】:2017-10-04 10:52:28
【问题描述】:

如何去除字母而非数字之间的空格

例如:

输入

I ES P 010 000 000 000 000 000 001 001 000 000 IESP 000 000

输出

IESP 010 000 000 000 000 000 001 001 000 000 IESP 000 000

我试过这样的

gsub("(?<=\\b\\w)\\s(?=\\w\\b)", "", x,perl=T)

但无法达到我希望的输出

【问题讨论】:

  • @Gurman - 将答案作为评论发布有什么意义?
  • @NikolasCharalambidis 我只是提供了一个替代方案。我认为正确的其他人已经发布了答案。这应该不是问题。

标签: r regex


【解决方案1】:

使用gsub 将字母之间的空白" " 替换为空"",然后返回替换和字母。

Input <- "I ES P 010 000 000 000 000 000 001 001 000 000 IESP 000 000"
gsub("([A-Z]) ([A-Z])", "\\1\\2", Input)
[1] "IESP 010 000 000 000 000 000 001 001 000 000 IESP 000 000"

@Wiktor Stribiżew 评论后编辑(将[A-z] 替换为[a-zA-Z]):

大小写使用[a-zA-Z]

Input <- "I ES P 010 000 000 000 000 000 001 001 000 000 IESP 000 000 aaa ZZZ"
gsub("([a-zA-Z]) ([a-zA-Z])", "\\1\\2", Input)
[1] "IESP 010 000 000 000 000 000 001 001 000 000 IESP 000 000 aaaZZZ"

【讨论】:

  • Do not use [A-z] to only match letters。它不仅匹配字母。此外,gsub("([A-Z]) ([A-Z])", "\\1\\2", Input) 不适用于I E P 1000 输入。
  • 查看我对重叠案例的回答。
  • 如果你碰巧在an Estonian locale,使用[[:alpha:]]而不是[A-Za-z]可能会更好......
【解决方案2】:

你需要使用

Input <- "I ES P E ES P 010 000 000 000 000 000 001 001 000 000 IESP 000 000"
gsub("(?<=[A-Z])\\s+(?=[A-Z])", "", Input, perl=TRUE, ignore.case = TRUE)
## gsub("(*UCP)(?<=\\p{L})\\s+(?=\\p{L})", "", Input, perl=TRUE) ## for Unicode

查看R demo onlineregex demo

注意ignore.case = TRUE 将使模式不区分大小写,如果不是预期的,请删除此参数。

详情

  • (?&lt;=[A-Z])(或(?&lt;=\p{L})) - 一个字母必须立即出现在当前位置的左侧(不添加到匹配中)
  • \\s+ - 1 个或多个空格
  • (?=[A-Z])(或(?=\\p{L})) - 一个字母必须立即出现在当前位置的右侧(不添加到匹配中)。

【讨论】:

  • 这应该是公认的答案 (+1) @jonnyblue8
  • Wiktor 感谢详细的解释。 PoGibas 感谢您的帮助和快速回复
猜你喜欢
  • 1970-01-01
  • 2011-06-22
  • 1970-01-01
  • 2019-12-05
  • 1970-01-01
  • 1970-01-01
  • 2010-12-11
  • 2018-03-12
  • 2023-03-04
相关资源
最近更新 更多