如何在R中使用正则表达式替换圆括号?

6

我相信这是一个非常简单的问题。我对R中的正则表达式非常熟悉,但我就是无法理解这个问题。

假设我们有以下字符串:

a <- c("a b . ) ] \"")

现在,我只想删除引号、点、右括号和右方括号。

所以,我想得到:"a b"

我尝试了:

gsub("[.\\)\"\\]]", "", a)

它不起作用。它返回:"a b . ) ]",所以什么都没有被删除。

只要我从搜索模式中排除\\],它就可以工作……

gsub("[.\\)\"]", "", a)

但是,当然,它不会删除右方括号!

我做错了什么?!

谢谢你的帮助!


3
尝试使用gsub('[[:punct:] ]+', ' ', a)。最好同时展示预期输出。或者使用 gsub('[][]|[.")]', '', a) - akrun
谢谢!第二个对我有用。当然,使用[[:punct:]]版本也可以,但我不想删除所有标点符号。你能给我一个提示为什么我的版本不起作用吗?我想了解问题所在。谢谢! - swolf
3个回答

2
a <- c('a b . ) ] "');
gsub('\\s*[].)"]\\s*','',a);
## [1] "a b"

当您想在括号表达式中包含右括号字符时,应始终首先将其包含在括号内;这将使其被视为括号表达式中的一个字符,而不是括号表达式的关闭定界符。


2

借鉴@akruns的评论

library(stringr)
str_trim(gsub('[.]|[[:punct:]]', '\\1', a))

将第一组括号中的句点替换为您想要保留的任何标点符号。


1
你可以试一下这个。
> gsub("\\b\\W\\b(*SKIP)(*F)|\\W", "", a, perl=T)
[1] "a b"
> gsub("\\b(\\W)\\b|\\W", "\\1", a, perl=T)
[1] "a b"

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