r - 在 R 中解析字符串并拆分它

标签 r regex strsplit

我在 R 中处理字符串时遇到了正则表达式问题。

我有 RNAfold 软件提供的数据结构,如下所示:

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

这是 miRNA 的典型二级结构,但我还有其他非 miRNA 的序列,看起来有点像这样:

...((((.....))))........................(((((((...((..(((..() (((...((((((.....)))).))...))).))).))...))))))).. ......

第二个序列有两个发夹环,一个在开头,另一个在中间,而第一个序列只有一个发夹环在中间。

点(“.”)代表未配对的核苷酸,而“(”代表与其对应物配对的核苷酸,表示为“)”。

我想分割这个字符串,以便我可以获得结构中的主干。

我想获得的输出是:

输入:

[1] "....(((..((((((((.(((((((((((.........))))))))))).))))))))..))).."

输出:

[1] "....(((..((((((((.(((((((((((........."
[2] "))))))))))).))))))))..))).."

这样我就可以计算分割字符串的数量以及词干的数量。

第二个序列的结果将是:

输入:

[1] ...((((.....))))...........(((((((...((..(((..((((...((((((.....)))).))...)))).))).))...))))))).......

输出:

[1] "...((((....."
[2] "))))...........(((((((...((..(((..((((...((((((....."
[3] ")))).))...)))).))).))...)))))))......."

所以本质上,我想要的是解析字符串,以便当它们找到“)”符号时将它们分割,保留字符串的所有符号。

我已经尝试使用 strplit() 和一些正则表达式变体,但我一直无法找到窍门...

有什么帮助吗?

谢谢

最佳答案

你可以做 lookahead并查找以右括号结尾且直接位于左括号之后的点。

x <- c("....(((..((((((((.(((((((((((..))))))))))).))))))))..)))..", 
       "...((((.....))))...........(((((((...((..(((..((((...((((((.....)))).))...)))).))).))...))))))).......")
strsplit(x, "\\((?=(\\.+\\)))", perl = TRUE)
# [[1]]
# [1] "....(((..((((((((.(((((((((("  "..))))))))))).))))))))..))).."
# 
# [[2]]
# [1] "...((("  ".....))))...........(((((((...((..(((..((((...((((("
# [3] ".....)))).))...)))).))).))...)))))))......."

关于r - 在 R 中解析字符串并拆分它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49753509/

相关文章:

基于相同的种子,在 R 中复制 SAS (rancor) 中生成的随机正态分布?

r - 标准化应用于数据框的数据的函数出错

c++ - 自定义类型的正则表达式

ruby-on-rails - 提取变量值 '_'之前的部分

r - Flexdashboard - 传单未全屏

r - openxlsx 中的 addStyle 函数不会用正确的颜色填充 excel 电子表格中的单元格

javascript - JQuery:用正则表达式替换字符串

javascript - JS Regexp - 如何在字符串中查找文本

function - 将函数添加到 Matlab 路径

R:删除空格 + 分隔符