首页 > 解决方案 > 从对象中提取特定字符串

问题描述

我目前正在做一个项目,我有一个列表,我只需要从整个对象中提取一个特定的字符串。

例如,其中一个对象的数据如下:

list(content = \"cskarelli haunting photo ritsopi panayiota reacts fire reach home village gouves evia konstant\", meta = list(author = character(0), datetimestamp = list(sec = 42.583606004715, min = 39, hour = 11, mday = 15, mon = 7, year = 121, wday = 0, yday = 226, isdst = 0), description = character(0), heading = character(0), id = character(0), language = character(0), origin = character(0)))"

目的是能够仅提取以下字符串:

cskarelli 令人难以忘怀的照片 ritsopi panayiota 反应火到达家乡村庄 gouves evia konstant

查看一些文档和试验/错误,使用 str_subset 或 str_sub 似乎是最优化的方法,但是,并不能呈现所需的结果。

例如,在使用时,str_subset(string, pattern) 我尝试运行代码,其中模式只查找字符串以 " 结尾并以 " 开头的位置,但我得到了引入 NA coersion 的错误。

如果有人对使用以“开头并以”结尾的模式提取特定数据的最佳方法有任何建议或想法,那就太好了。

谢谢

标签: r

解决方案


这是您问题的字面答案:

string <- "list(content = \"cskarelli haunting photo ritsopi panayiota reacts fire reach home village gouves evia konstant\", meta = list(author = character(0), datetimestamp = list(sec = 42.583606004715, min = 39, hour = 11, mday = 15, mon = 7, year = 121, wday = 0, yday = 226, isdst = 0), description = character(0), heading = character(0), id = character(0), language = character(0), origin = character(0)))"
regmatches(string, gregexpr('(?<=")[^"]*(?=")', string, perl = TRUE))
# [[1]]
# [1] "cskarelli haunting photo ritsopi panayiota reacts fire reach home village gouves evia konstant"

尽管我会再次声明:这是在修复症状,而不是我认为的潜在问题,即您(或某人)以某种方式拥有一个合法的 Rlist对象,该对象带有一些错误的代码,被转换为该对象的字符串表示形式,您现在正尝试从中保存数据。

从此字符串中提取的另一种方法(因为它是 R 表达式)是将其转换回 R 对象:

obj <- eval(parse(text=string))
obj$content
# [1] "cskarelli haunting photo ritsopi panayiota reacts fire reach home village gouves evia konstant"
str(obj)
# List of 2
#  $ content: chr "cskarelli haunting photo ritsopi panayiota reacts fire reach home village gouves evia konstant"
#  $ meta   :List of 7
#   ..$ author       : chr(0) 
#   ..$ datetimestamp:List of 9
#   .. ..$ sec  : num 42.6
#   .. ..$ min  : num 39
#   .. ..$ hour : num 11
#   .. ..$ mday : num 15
#   .. ..$ mon  : num 7
#   .. ..$ year : num 121
#   .. ..$ wday : num 0
#   .. ..$ yday : num 226
#   .. ..$ isdst: num 0
#   ..$ description  : chr(0) 
#   ..$ heading      : chr(0) 
#   ..$ id           : chr(0) 
#   ..$ language     : chr(0) 
#   ..$ origin       : chr(0) 

但是eval(parse(..))应谨慎使用 ,因为它可能导致与修复症状一样多的问题。


推荐阅读