在R中删除字符串开头和结尾直到找到一个模式

3

我有一个字符串,表示RNA的次级结构,例如:

"....(((((((((...((...(((((((((((..((.(.......))))))))..))))..)))....."

我的目标是去掉字符串两端的这些点,使其变为:

"(((((((((...((...(((((((((((..((.(.......))))))))..))))..)))"

我一直在尝试使用gsub函数,例如:
gsub("\\.+\\(", "", string)

对于开头,以及:
gsub("\\)\\.+", "", string)

最后结果为:

但这个指令的输出是:

"(((((((((((((((((((((((((.......))))))))..))))..)))....."

并且:

"....(((((((((...((...(((((((((((..((.(.......)))))))))))))))"

基本上,我不想删除中间的点,只是想删除开头和结尾的点。

有谁知道在 R 中解决这个问题的好方法吗?

谢谢。

2个回答

8
我们可以通过转义符(\\.)或将点号放在方括号中([.]),因为点号是元字符,可以匹配任何字符。
gsub("^[.]*|[.]*$", "", string)
#[1] "(((((((((...((...(((((((((((..((.(.......))))))))..))))..)))"

在上述代码中,我们指定锚点(^)匹配字符串的开头,然后是零个或多个点号(.)或 |,以及字符串结尾处的零个或多个点号($)。最后用空格 ("") 替换。

数据

string <- "....(((((((((...((...(((((((((((..((.(.......))))))))..))))..)))....."

4
在R 3.6.0中,trimws函数拥有一个whitespace=参数,因此在末尾的注释中使用x
trimws(x, whitespace = "\\.")
## [1] "(((((((((...((...(((((((((((..((.(.......))))))))..))))..)))"

注意

x <- "....(((((((((...((...(((((((((((..((.(.......))))))))..))))..)))....."

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