我希望使用R从文本文件中提取所有唯一的文本子字符串,这些字符串符合表格" matrixname [ rowname ,列编号]&#34 ;.我只使用grep和extract_string_all(stringr)取得了有限的成功,因为它只返回整行,而不返回子串。尝试使用gsub替换不需要的文本是不成功的。以下是我一直使用的代码示例。
#Read in file
txt<-read.table("Project_R_code.R")
#create new object to create lines that contain this pattern
txt2<-grep("param\\[.*1\\]",txt$V1, value=TRUE)
#remove all text that does not match the above pattern
gsub("[^param\\[.*1\\]]","", txt2,perl=TRUE)
第二行有效(但同样没有给我一个该模式的子串)。但是,用于删除不匹配模式的gsub代码会保留行并将它们转换为如下所示:
[200] "[p.p]param[ama1]param[ama11]*[r1]param[ama1]...
我不明白为什么。我意识到这种将线条削减成更容易管理的方法更加乏味,但这是我知道如何获得模式的唯一方法。
最好我希望R吐出一个在文本文件中找到的所有(唯一)子串的列表,它与我的模式匹配,但我不知道命令。对此有任何帮助非常感谢。
答案 0 :(得分:1)
如果您想提取单个组件,请尝试str_match
:
test <- c("aaa[name1,1]", "bbb[name2,3]", "ccc[name3,3]")
stringr::str_match(test, "([a-zA-Z0-9_]+)[[]([a-zA-Z0-9_]+),.*?(\\d+)\\]")
## [,1] [,2] [,3] [,4]
## [1,] "aaa[name1,1]" "aaa" "name1" "1"
## [2,] "bbb[name2,3]" "bbb" "name2" "3"
## [3,] "ccc[name3,3]" "ccc" "name3" "3"
否则,请使用str_extract
。
请注意,为了匹配ERE / TRE中的[
,我们使用包含单个[
字符的集合,即[[]
。
此外,如果您在一个字符串中有多个匹配项,请使用str_match_all
或str_extract_all
。