如何修剪括号内的空格?
x <- c("the li7(li7, p)b13 reaction")
在这种特殊情况下,它应该只删除逗号和p之间的空格,但我正在寻找一般的解决方案。
答案 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:]]
切换为.
,因此现在几乎可以处理任何内容。