R:修剪括号内的空格

时间:2016-11-14 11:35:53

标签: r trim

如何修剪括号内的空格?

x <- c("the li7(li7, p)b13 reaction")

在这种特殊情况下,它应该只删除逗号和p之间的空格,但我正在寻找一般的解决方案。

2 个答案:

答案 0 :(得分:2)

cases <-c(
  "(a,b)",
  "(a, b)",
  "( a, b)",
  "a(a, b)",
  "a (a, b)",
  "a (a, b) a(a,b) a(a,b )"
)

gsub("[[:space:]](?=[^()]*\\))", "", cases, perl = TRUE)
[1] "(a,b)"                 "(a,b)"                 "(a,b)"                
[4] "a(a,b)"                "a (a,b)"               "a (a,b) a(a,b) a(a,b)"

正则表达式的工作原理如下:当它找到一个空格时,它会向前看右括号。如果它在途中发现任何其他括号,它将停止并继续前进,直到找到没有空格的空格。它用空字符串替换它。

答案 1 :(得分:1)

好的,我在str_extract() - 包中找到了使用stringr的解决方案。

gsub("\\(+.*[[:blank:]]+.*\\)+", 
 gsub("[[:blank:]]", "", 
  str_extract(x, "\\(+.*[[:blank:]]+.*\\)+")),x)

这使用gsub()搜索括号内有空格的字符串模式,然后使用另一个gsub将其替换为没有空格的提取部分。

编辑:如果括号内的模式由[[:graph:]] - 系列未涵盖的内容组成,则可能需要更改表达式的该部分。

修改编辑:将[[:graph:]]切换为.,因此现在几乎可以处理任何内容。