R: Trim 括号内的空格

R: Trim whitespace within brackets

如何去除括号内的空格?

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

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

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

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

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

编辑:如果括号内的模式包含 [[:graph:]] 系列未涵盖的内容,您可能需要更改表达式的那部分。

编辑中的编辑:将 [[:graph:]] 切换为 .,因此现在应该可以处理几乎所有内容。

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)"

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