从字符串中删除空格后的所有内容

30

我想要在一个字符串中移除空格后的所有内容。

例如:

"my string is sad"

应该返回

"my"

我一直在尝试使用sub/gsub来做这件事,但到目前为止还没有成功。

5个回答

37

您可以使用正则表达式,例如

sub(" .*", "", x)

请查看正则表达式演示

在这里,sub只会执行一次搜索和替换操作。模式.*将找到第一个空格(因为正则表达式引擎从左到右搜索字符串),并匹配任何零个或多个字符(在TRE正则表达式中,甚至包括换行符,当使用perl=TRUE时,请注意这种情况不适用)尽可能多地匹配,直到字符串结束。

一些变化:

sub("[[:space:]].*", "", x) # \s or [[:space:]] will match more whitespace chars
sub("(*UCP)(?s)\\s.*", "", x, perl=TRUE) # PCRE Unicode-aware regex
stringr::str_replace(x, "(?s) .*", "")   # (?s) will force . to match any chars

请查看在线 R 演示


说实话,我建议尝试使用sub("(*UCP)(?s)\\s.*", "", x, perl=TRUE)这个变体。很高兴发现它可以在其他变体失败的情况下起作用。 - Pake

14
strsplit("my string is sad"," ")[[1]][1]

4
对于一个数据帧中的列,应用向量化版本会更加高效。 - Monica Heddneck

12
或者,将第一个空格后的所有内容替换为无。
gsub(' [A-z ]*', '' , 'my string is sad')

并且还包括数字:

gsub('([0-9]+) .*', '\\1', c('c123123123 0320.1'))

1
小心,顶部的示例无法删除句号! - Monica Heddneck

6

Stringr是你的好帮手。

library(stringr)
word("my string is sad", 1)

3

如果您想使用正则表达式来完成:

gsub('([A-z]+) .*', '\\1', 'my string is sad')

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