Удалите начало и конец строки, пока не найдете шаблон в R - PullRequest
3 голосов
/ 20 мая 2019

Итак, у меня есть строка, представляющая вторичную структуру сворачиваемой РНК, например:

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

Моя цель - избавиться от этих точек в крайних точках строки, чтобы я получил:

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

Я пытался с помощью функции gsub, например:

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

для начала и:

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

для конца

но результат этой команды:

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

и:

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

По сути, я не хочу, чтобы промежуточные точки были удалены, только те, что в начале и вконец.

Кто-нибудь знает хороший способ решить его в R?

Спасибо

Ответы [ 2 ]

8 голосов
/ 20 мая 2019

Мы можем либо экранировать (\\.), либо поместить . в квадратные скобки ([.]), так как . - метасимвол, соответствующий любому символу.

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

В приведенном вышемы указываем привязку (^), чтобы соответствовать началу строки, за которой следует ноль или более . (*) или |, ноль или более точек в конце ($) строкии замените пробелом ("")

data

string <- "....(((((((((...((...(((((((((((..((.(.......))))))))..))))..)))....."
4 голосов
/ 20 мая 2019

В R 3.6.0 trimws имеет аргумент whitespace=, поэтому в конце примечания используйте x:

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

Примечание

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