我使用readLines将一个txt文档导入到R中,但是文档被转换为一个charactor向量,即,向量中的每个元素都表示txt文档中的一行,这样我就不能使用正则表达式来匹配多个行数据。如何解决这个问题?
示例 document test.txt
ID cel-let-7 standard; RNA; CEL; 99 BP.
XX
AC MI0000001;
XX
DE Caenorhabditis elegans let-7 stem-loop
XX
RN [1]
RX PUBMED; 11679671.
RA Lau NC, Lim LP, Weinstein EG, Bartel DP;
RT "An abundant class of tiny RNAs with probable regulatory roles in
RT Caenorhabditis elegans";
RL Science. 294:858-862(2001).
我需要ID和DE之间的数据,但下面的代码不起作用,因为无法匹配多行。
pattern <- 'ID.+\nXX\nAC.+\nXX')
m <- gregexpr(pattern, text, perl = T)
也许有另一种方法,但我只想用正则表达式来解决。
答案 0 :(得分:0)
以下命令将获取ID
和DE
> f <- paste(readLines("file"), collapse="\n")
> m <- gregexpr("(?m)^ID.*\\n\\K[\\S\\s]*?(?=\\nDE)", f, perl=TRUE)
> regmatches(f, m)
[[1]]
[1] "\nXX\n\nAC MI0000001;\n\nXX"
OR
> m <- gregexpr("(?s)^ID.*?\\nDE", f, perl=TRUE)
> regmatches(f, m)
[[1]]
[1] "ID cel-let-7 standard; RNA; CEL; 99 BP.\n\nXX\n\nAC MI0000001;\n\nXX\nDE"