我正在寻找R中的正则表达式来提取.sdf化学数据文件中给出的字段。 在这种情况下,字段由<分隔。 >并在行的开头跟随“>”。 例如。在
的情况下string="> <FIELD1>\nfield text1\n\n> <FIELD2>\nfield text2\n\n> <FIELD3>field text3"
它必须返回
fields=c("FIELD1","FIELD2","FIELD3")
(它们可能会发生多次,所以我只需要unique()
个)
有什么想法吗?
欢呼声, 汤姆
答案 0 :(得分:3)
您可以使用gregexpr
和regmatches
来提取子字符串,使用unique
来删除重复项。
unique(regmatches(string, gregexpr("(?<=<)\\w+(?=>)", string, perl = TRUE))[[1]])
# [1] "FIELD1" "FIELD2" "FIELD3"
答案 1 :(得分:3)
试试这个。它提取由括号括起的正则表达式部分匹配的字符串部分,然后使用unique
简化它:
library(gsubfn)
strapplyc(string, "<([^>]*)>", simplify = unique)
,并提供:
[1] "FIELD1" "FIELD2" "FIELD3"
修改次要简化。