3

我正在寻找 R 中的正则表达式来提取 .sdf 化学数据文件中给出的字段。在这种情况下,字段由 < > 分隔,并在行首跟在“>”之后。例如,在

string=">  <FIELD1>\nfield text1\n\n>  <FIELD2>\nfield text2\n\n>  <FIELD3>field text3"

它必须返回

fields=c("FIELD1","FIELD2","FIELD3")

(它们可能会出现多次,所以我只需要unique()那些)有什么想法吗?

干杯,汤姆

4

2 回答 2

3

您可以使用gregexprandregmatches提取子字符串并unique删除重复项。

unique(regmatches(string, gregexpr("(?<=<)\\w+(?=>)", string, perl = TRUE))[[1]])
# [1] "FIELD1" "FIELD2" "FIELD3"
于 2014-02-22T20:25:07.427 回答
3

尝试这个。它提取与括号包围的正则表达式部分匹配的字符串部分,然后使用以下方法对其进行简化unique

library(gsubfn)
strapplyc(string, "<([^>]*)>", simplify = unique)

给予:

[1] "FIELD1" "FIELD2" "FIELD3"

修订后的小幅简化。

于 2014-02-22T20:27:58.610 回答