r - 从 R 中的文本文件中提取模式子字符串

标签 r regex string pattern-matching

我希望使用 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_allstr_extract_all .

关于r - 从 R 中的文本文件中提取模式子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24161683/

相关文章:

r - 如何在数字输入中添加货币符号

r - 将 R 中的日期从破折号转换为斜线格式?

PHP preg_match_all 正则表达式从 css 获取像素值( "px")

javascript - 正则表达式字符串内只有一个点不在开头或结尾

java - 获取用户输入并将其分配给对象

JavaScript 案例 : "look at" + item

r - 为什么 R 不 relevel?

r - R中的条件计数

regex - Jsoup、正则表达式、XPath 从 HTML 提取内容的性能比较?

python - 从 pandas 的字符串列中删除非 ASCII 字符