删除字符串的开头和结尾,直到在R中找到模式为止

Emi*_*hez 3 regex string r gsub

因此,我有一个字符串代表折叠RNA的二级结构,例如:

"....(((((((((...((...(((((((((((..((.(.......))))))))..))))..)))....."
Run Code Online (Sandbox Code Playgroud)

我的目标是摆脱字符串极端中的这些点,以便获得:

"(((((((((...((...(((((((((((..((.(.......))))))))..))))..)))"
Run Code Online (Sandbox Code Playgroud)

我一直在尝试通过使用gsub函数,如:

gsub("\\.+\\(", "", string)
Run Code Online (Sandbox Code Playgroud)

首先,以及:

gsub("\\)\\.+", "", string)
Run Code Online (Sandbox Code Playgroud)

最后

但是此命令的输出为:

"(((((((((((((((((((((((((.......))))))))..))))..)))....."
Run Code Online (Sandbox Code Playgroud)

和:

"....(((((((((...((...(((((((((((..((.(.......)))))))))))))))"
Run Code Online (Sandbox Code Playgroud)

基本上,我不希望除去中间的点,仅除去开头和末尾的中间点。

有人知道用R解决它的好方法吗?

谢谢

akr*_*run 8

我们可以将元字符转义(\\.)或放在.方括号([.])中,.以匹配任何字符。

gsub("^[.]*|[.]*$", "", string)
#[1] "(((((((((...((...(((((((((((..((.(.......))))))))..))))..)))"
Run Code Online (Sandbox Code Playgroud)

在上面的代码中,我们指定了锚点(^)以匹配字符串的开头,后跟零个或多个.*)或字符串的结尾()或|零个或多个点,$并替换为空白(""

数据

string <- "....(((((((((...((...(((((((((((..((.(.......))))))))..))))..)))....."
Run Code Online (Sandbox Code Playgroud)