从“JSON”文件中提取列

时间:2014-12-17 07:56:44

标签: regex r

我有一些类似于JSON文件的字符串:

string <- "{'text': u'@RobertTekieli @Czerniakowianka @1234Mania mysle, ze nie weszlabym do zadnego wiezienia bez straznikow', 'created_at': u'Tue May 20 08:16:55 +0000 2014'}"

我想提取两个字符串 - 在textcreated_at

之后
@RobertTekieli @Czerniakowianka @1234Mania mysle, ze nie weszlabym do zadnego wiezienia bez straznikow

Tue May 20 08:16:55 +0000 2014

我想用正则表达式而不是fromJSON函数或类似的东西来做。但实际上我不知道如何。有什么建议吗?

2 个答案:

答案 0 :(得分:2)

使用\K放弃先前在匹配时打印的匹配字符。 \K使文本与整个正则表达式匹配保持匹配。

> string <- "{'text': u'@RobertTekieli @Czerniakowianka @1234Mania mysle, ze nie weszlabym do zadnego wiezienia bez straznikow', 'created_at': u'Tue May 20 08:16:55 +0000 2014'}"
> m <- gregexpr("'(?:text|created_at)':\\s+u'\\K[^']*", string, perl=TRUE)
> regmatches(string, m)
[[1]]
[1] "@RobertTekieli @Czerniakowianka @1234Mania mysle, ze nie weszlabym do zadnego wiezienia bez straznikow"
[2] "Tue May 20 08:16:55 +0000 2014" 

> library(stringr)
> str_extract_all(string, perl("'(?:text|created_at)':\\s+u'\\K[^']*"))[[1]]
[1] "@RobertTekieli @Czerniakowianka @1234Mania mysle, ze nie weszlabym do zadnego wiezienia bez straznikow"
[2] "Tue May 20 08:16:55 +0000 2014"

DEMO

答案 1 :(得分:2)

(?<=text':\su')[^']+|(?<=created_at':\su')[^']+

你可以尝试一下。参见演示。

https://regex101.com/r/eZ0yP4/27