【问题标题】:Extracting pattern substrings from a text file in R从R中的文本文件中提取模式子字符串
【发布时间】: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


【解决方案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_allstr_extract_all

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-09-28
    • 1970-01-01
    • 1970-01-01
    • 2020-09-18
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    相关资源
    最近更新 更多