如何在R中去除单词之间的空格?

3

我一直在尝试消除或替换单词之间的空格,而保留其他空格不变。例如:

string <- "Hi buddy 3.256.225 25.365.425"

希望得到的结果是:

string <- "Hibuddy 3.256.225 25.365.425"

我一直在尝试使用"gsub"和"str",但所有空格都被消除了,只想删除单词之间的空格。

谢谢

2个回答

3
我们可以捕获不带空格的字母,并在 gsub 中使用反向引用 (\\1, \\2)。
gsub("([A-Za-z])\\s+([A-Za-z])", "\\1\\2", string)
[1] "Hibuddy 3.256.225 25.365.425"

上述正则表达式匹配任意字母 ([A-Za-z]) 并捕获为一组 ((...)),然后是一个或多个空格 (\\s+),另一个字母也被捕获为一组。在替换中,指定这些捕获组的反向引用而不带任何空格。

嗨,它差不多成功了,问题是我有一些带有“Hi Buddy how are you 42,5285”的行,现在我得到了“HiBuddyhow areyou 42,5285”,那里多了一个空格。 - Eduardo Orellana Buigley
@EduardoOrellanaBuigley 我没有得到那个空格。你有任何 utf-8 编码的字符吗,例如 str2 <- "嗨,伙计,你好吗42,5285"; gsub("([A-Za-z])\\s+([A-Za-z])", "\\1\\2", str2)# [1] "HiBuddyhowareyou 42,5285" - akrun
@EduardoOrellanaBuigley 如果有一些特殊字符。也许你可以使用 gsub("([^0-9.])\\s+([^0-9.])", "\\1\\2", str2)# [1] "HiBuddyhowareyou 42,5285" - akrun
嗨,谢谢。我刚修复了它,只是运行了代码两次,就像魔术一样工作了。 - Eduardo Orellana Buigley
@EduardoOrellanaBuigley 很高兴知道它能正常工作。 - akrun

0
我们可以使用 stringr 包中的 str_squish 函数:
library(stringr)
str_squish(string)

[1] “嗨,伙计3.256.225 25.365.425”


1
你可以尝试使用str_remove_all(string, "(?<=[A-Za-z])\\s+(?=[A-Za-z])")# [1] "Hibuddy 3.256.225 25.365.425",因为str_squish只会移除开头和结尾的空格(如果我没记错的话)。 - akrun
1
从帮助文档中:str_trim()函数可以删除字符串开头和末尾的空白字符;str_squish()函数还可以缩减字符串内部重复的空白字符。 - Martin Gal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接