删除字符串中的字符

3
我有一个字符串。
"Manager *?position (is not *# filled"

我需要这个

"Manager position is not filled" 

我尝试了:

 paste(strsplit(st, "[*?(#]")[[1]],collapse="")

但是,间距不正确。
谢谢。
4个回答

1

如果你想使用strsplit()函数,我认为这种方法可以正确地获取空格。

> st <- "Manager *?position (is not *# filled"
> ss <- strsplit(st, "[[:punct:]]|\\s")[[1]]
> paste(ss[nzchar(ss)], collapse = " ")
# [1] "Manager position is not filled"

1
我喜欢nzchar函数。我猜如果你使用:paste(strsplit(st, "[[:punct:] ]+")[[1]], collapse=" ") [1] "Manager position is not filled",就可以避免使用nzchar - akrun
不确定为什么有人会更喜欢使用3个不同的函数而不是只用一个 gsub 函数... - David Arenburg
1
@David。是的,gsub代码更短,但Richard回答了如何纠正我的代码。 - user3738650
1
@will,你也可以使用ss[ss != ""]代替nzchar。对于这个问题,它们的结果是相同的。 - Rich Scriven
@Richard。谢谢。我喜欢Tyler的帖子中的clean函数。clean(paste(ss, collapse=" ")) - user3738650
@will,你的代码是错误的。我们向你展示了正确的方法。在R中有内置的、向量化的和完全优化的函数,因此没有必要运行3个不同的函数。你也可以使用for循环来计算总和等。 - David Arenburg

0

或者,您可以使用stringr包,并且空格问题也会得到解决:

string  <- "Manager *?position (is not *# filled"
str_replace_all(string = string, pattern = "[[:punct:]]+", replacement = "")

0

使用 qdap 的方法:

st <- "Manager *?position (is not *# filled"

library(qdap)
clean(strip(st, lower.case = FALSE))

## [1] "Manager position is not filled"

strip函数可以去除特殊字符,而clean函数则可以去除多余的空格。


0

可以尝试

gsub("[[:punct:] ]+"," ", st) 

或者

gsub("[*?(#]", "", st)

虽然后者会返回一个额外的空格


1
你可以将其修改为:gsub("[[:punct:] ]+"," ", st),对于额外的空格,“Manager position is not filled”(管理职位尚未填补)。 - akrun
好主意 @arkun,已修改 - David Arenburg

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