我希望使用 R 从文本文件中提取所有唯一的文本子字符串,这些子字符串遵循“矩阵名[行名,列号]”的形式。我使用 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 吐出它在文本文件中找到的所有(唯一)子字符串的列表,这些子字符串与我的模式匹配,但我不知道命令。非常感谢您对此的任何帮助。
最佳答案
如果您想提取单个组件,请尝试 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
。关于r - 从 R 中的文本文件中提取模式子字符串,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24161683/