首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用正则表达式R程序匹配多行数据

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

Stack Overflow用户
提问于 2014-12-30 12:31:46
回答 1查看 182关注 0票数 1

我使用readLines将txt文档导入到R中,但是文档被转换成字符向量,即向量中的每个元素都表示txt文档中的一行,因此我不能使用正则表达式来匹配多行data.How来解决这个问题?

示例文档test.txt

代码语言:javascript
复制
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之间的数据,但是下面的代码不能工作,因为无法匹配多行。

代码语言:javascript
复制
pattern <- 'ID.+\nXX\nAC.+\nXX')
m <- gregexpr(pattern, text, perl = T)  

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-30 12:40:53

下面的命令将获取IDDE之间的行

代码语言:javascript
复制
> 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"

代码语言:javascript
复制
> 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"
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27705542

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档