【发布时间】:2014-06-11 11:23:07
【问题描述】:
我希望使用 R 从文本文件中提取所有唯一的文本子字符串,这些子字符串遵循“matrixname[rowname,column number em>]"。我在 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 吐出它在文本文件中找到的所有(唯一)子字符串的列表,这些子字符串与我的模式匹配,但我不知道命令。非常感谢您对此提供任何帮助。
【问题讨论】:
-
gsubfn 中的
strapplyc可用于使用正则表达式提取文本。strapply在同一个包中可以同时提取和变换。 -
下次请让你的例子最小化和独立。
-
你能提供一些示例输入和所需的输出吗?我很困惑你想做什么。
regexpr()和regmatches()似乎可以解决问题,但我无法使用您提供的信息进行测试。 -
@MrFlick 抱歉回复晚了。这是我正在使用的输入示例。
GS["id_y", 1] = param["id_alpha", 1] * (GS["id_x1", 1] + (1 - param["id_beta", 1]) * GS["id_x2", 1])文本文件中有多行与此类似。所需的输出是由param["id_alpha", 1],param["id_beta", 1]和文本文件中的所有其他此类矩阵组成的列表。希望这对您有所帮助,并为它的外观道歉。
标签: r regex string pattern-matching