如何使用正则表达式R编程匹配多行数据

时间:2014-12-30 12:31:46

标签: regex r

我使用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)  
  

也许有另一种方法,但我只想用正则表达式来解决。

1 个答案:

答案 0 :(得分:0)

以下命令将获取IDDE

之间的行
> 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"