所以我有一个字符串代表折叠RNA的二级结构,例如:
"....(((((((((...((...(((((((((((..((.(.......))))))))..))))..)))....."
我的目标是摆脱字符串极端中的这些点,以便获得:
"(((((((((...((...(((((((((((..((.(.......))))))))..))))..)))"
我一直在尝试使用gsub函数,例如:
gsub("\\.+\\(", "", string)
首先,以及:
gsub("\\)\\.+", "", string)
最后
但是此命令的输出是:
"(((((((((((((((((((((((((.......))))))))..))))..)))....."
和:
"....(((((((((...((...(((((((((((..((.(.......)))))))))))))))"
基本上,我不想删除中间的点,只希望删除开头和结尾的中间点。
有人知道用R解决它的好方法吗?
谢谢
答案 0 :(得分:8)
我们可以转义(\\.
或将.
放在方括号([.]
)中,因为.
是可匹配任何字符的元字符。
gsub("^[.]*|[.]*$", "", string)
#[1] "(((((((((...((...(((((((((((..((.(.......))))))))..))))..)))"
在上面,我们指定锚点(^
)以匹配字符串的开头,后跟零个或多个.
(*
)或|
,零字符串末尾($
)或更多点,并替换为空白(""
)
string <- "....(((((((((...((...(((((((((((..((.(.......))))))))..))))..)))....."
答案 1 :(得分:3)
在R 3.6.0中,trimws
有一个whitespace=
参数,因此请在末尾的注释中使用x
:
trimws(x, whitespace = "\\.")
## [1] "(((((((((...((...(((((((((((..((.(.......))))))))..))))..)))"
x <- "....(((((((((...((...(((((((((((..((.(.......))))))))..))))..)))....."