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

时间:2019-05-20 17:00:31

标签: r regex string gsub

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

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

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

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

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

gsub("\\.+\\(", "", string)

首先,以及:

gsub("\\)\\.+", "", string)

最后

但是此命令的输出是:

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

和:

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

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

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

谢谢

2 个答案:

答案 0 :(得分:8)

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

gsub("^[.]*|[.]*$", "", string)
#[1] "(((((((((...((...(((((((((((..((.(.......))))))))..))))..)))"

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

数据

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

答案 1 :(得分:3)

在R 3.6.0中,trimws有一个whitespace=参数,因此请在末尾的注释中使用x

trimws(x, whitespace = "\\.")
## [1] "(((((((((...((...(((((((((((..((.(.......))))))))..))))..)))"

注意

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