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 - 在 dplyr 的 mutate 中使用 switch 语句

r - data.table 在 R 中复制表

r - 计算时间序列的速度(时间的一阶导数)

R 合并数据帧,允许不精确的 ID 匹配(例如,附加字符 1234 匹配 ab1234)

r - 使用 strsplit 模式匹配将字符串分散到多列中

python - rsplit() 无法使用正则表达式拆分列

regex - 从R中的向量中提取子字符串

java - 为什么 String.split ("£", 2) 不工作?

java - 正则表达式匹配连字符斜杠括号内的字母数字

regex - R中将段落拆分成句子