删除字母之间的空格[A-Za-z]

时间:2017-10-04 10:52:28

标签: r regex

如何删除字母NOT数字

之间的空格

例如:

输入

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)

但是我无法达到我希望的输出

2 个答案:

答案 0 :(得分:6)

使用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"

答案 1 :(得分:3)

您需要使用

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会使模式不区分大小写,如果不符合,则删除此参数。

<强>详情

  • (?<=[A-Z])(或(?<=\p{L})) - 信件必须立即显示在当前位置的左侧(不会将其添加到匹配项中)
  • \\s+ - 一个或多个空格
  • (?=[A-Z])(或(?=\\p{L})) - 一封信必须立即出现在当前位置的右侧(不会将其添加到匹配项中)。