我有一个存储在 R 中的字符串。我可以使用什么代码来提取两个值之间的文本?例如:
sql <- "SELECT field1, field2, field3 FROM tbl WHERE x=y"
我想提取field1, field2, field3
为单独的字符串。我可以使用substring
,但我不清楚如何确定与“SELECT”结尾和“FROM”开头相关的整数值。
我有一个存储在 R 中的字符串。我可以使用什么代码来提取两个值之间的文本?例如:
sql <- "SELECT field1, field2, field3 FROM tbl WHERE x=y"
我想提取field1, field2, field3
为单独的字符串。我可以使用substring
,但我不清楚如何确定与“SELECT”结尾和“FROM”开头相关的整数值。
这是使用的一种选择gsub
:
gsub("^.*SELECT *(.*?) +FROM.*$", "\\1", sql)
你可以这样做:
split_sql = strsplit(sql, split = " ")
result = paste(split_sql[1][[2]], split_sql[1][[3]], split_sql[1][[4]], sep = " ")
这会给你:
#[1] "field1, field2, field3"
1)一种方法是删除所有不需要的东西:
gsub("^SELECT *| FROM .*", "", sql)
2) 如果我们有一个包含必填字段的数据框,另一种方法是使用 sqldf 运行查询,然后取其名称:
library(sqldf)
tbl <- data.frame(field1 = 1, field2 = 2, field3 = 3, x = 4, y = 5)
toString(names(sqldf(sql)))
我的偏好是:
# Pull out strings between SELECT and FROM
Fields = gsub("SELECT (.*) FROM.*","\\1",sql)
# Remove spaces
CleanFields = (gsub("\\s+", "", Fields))
# Split into items
Items = unlist(strsplit(CleanFields,","))
然后您可以将每个 field1 索引为 Items[1]
(当然这可以放入一个函数或合并到一行......)