符号后面的grep子串

时间:2016-03-09 19:10:40

标签: regex r

我想创建一个新列,其中包含;列中最后 ID符号后面的字符串。我知道怎么做是使用awk,但不是在R.

> head(Mapped2)
                                              IsomiR                                                               ID
1                  TCCCGGGTGGTCTAGTGGTTAGGATTCGGCGCT                                   URS0000635088;tRNA-Glu-CTC-2-1
2                  TCCCGGGTGGTCTAGTGGTTAGGATTCGGCGCT                                           URS000011CFE8;misc_RNA
3                  TCCCGGGTGGTCTAGTGGTTAGGATTCGGCGCT                                  URS00006A26A3;Homo;sapiens;tRNA
4 TTGCCCTCGGCCGATCGAAAGGGAGTCGGGTTCAGATCCCCGAATCCGGA                    URS00008D20CE;Homo;sapiens;large;subunit;rRNA
5 TTGCCCTCGGCCGATCGAAAGGGAGTCGGGTTCAGATCCCCGAATCCGGA                    URS00008C7E99;Homo;sapiens;large;subunit;rRNA
6 TTGCCCTCGGCCGATCGAAAGGGAGTCGGGTTCAGATCCCCGAATCCGGA URS000075EC78;Homo;sapiens;RNA,;28S;ribosomal;5;(RNA28S5),;rRNA.

3 个答案:

答案 0 :(得分:2)

如何匹配;与字符串结尾之间的非;字符的模式,如下所示:

s <- "6TTGCCCTCGGCCGATCGAAAGGGAGTCGGGTTCAGATCCCCGAATCCGGAURS000075EC78;Homo;sapiens;RNA,;28S;ribosomal;5;(RNA28S5),;rRNA."
gsub(".*;([^;]+)$", "\\1", s)
# [1] "rRNA."

工作示例:

d <- structure(list(ID = structure(c(2L, 1L, 3L, 6L, 5L, 4L), .Label = c("URS000011CFE8;misc_RNA", "URS0000635088;tRNA-Glu-CTC-2-1", "URS00006A26A3;Homo;sapiens;tRNA", "URS000075EC78;Homo;sapiens;RNA,;28S;ribosomal;5;(RNA28S5),;rRNA.", "URS00008C7E99;Homo;sapiens;large;subunit;rRNA", "URS00008D20CE;Homo;sapiens;large;subunit;rRNA"), class = "factor")), .Names = "ID", class = "data.frame", row.names = c(NA, -6L))

d$newcol <- gsub(".*;([^;]+)$", "\\1", d$ID)

d
#                                                                 ID           newcol
# 1                                   URS0000635088;tRNA-Glu-CTC-2-1 tRNA-Glu-CTC-2-1
# 2                                           URS000011CFE8;misc_RNA         misc_RNA
# 3                                  URS00006A26A3;Homo;sapiens;tRNA             tRNA
# 4                    URS00008D20CE;Homo;sapiens;large;subunit;rRNA             rRNA
# 5                    URS00008C7E99;Homo;sapiens;large;subunit;rRNA             rRNA
# 6 URS000075EC78;Homo;sapiens;RNA,;28S;ribosomal;5;(RNA28S5),;rRNA.            rRNA.

答案 1 :(得分:2)

如果要捕获最后一次出现的;,您可以使用greedy operator捕获它之前的所有内容(包括)并删除它,同时只留下剩下的内容,例如

sub(".*;" , "", Mapped2$ID)
# [1] "tRNA-Glu-CTC-2-1" "misc_RNA" "tRNA" "rRNA" "rRNA" "rRNA."          

答案 2 :(得分:1)

鉴于grep使用正则表达式,这里有一个适合我的正则表达式: /;([^\;]*)\n/g

请参阅this regex demo了解实施情况。

不幸的是,我不知道R,但希望这可以让你开始使用grep。