如何删除字母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)
但是我无法达到我希望的输出
答案 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
注意:ignore.case = TRUE
会使模式不区分大小写,如果不符合,则删除此参数。
<强>详情
(?<=[A-Z])
(或(?<=\p{L})
) - 信件必须立即显示在当前位置的左侧(不会将其添加到匹配项中)\\s+
- 一个或多个空格(?=[A-Z])
(或(?=\\p{L})
) - 一封信必须立即出现在当前位置的右侧(不会将其添加到匹配项中)。