【问题标题】:Extracting columns from "JSON" file从“JSON”文件中提取列
【发布时间】:2014-12-17 07:56:43
【问题描述】:

我有一些类似于 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 函数或类似的东西来做。但实际上我不知道怎么做。有什么建议吗?

【问题讨论】:

  • 用正则表达式解析 JSON 字符串可能非常痛苦。你不想使用内置函数的原因是什么?
  • 这仍然不是有效的 JSON 数据。你真的应该尝试获得有效的输入。从长远来看,它会让您的生活更轻松。
  • 我知道,这就是为什么我想把它当作普通字符串。 stri_extract_all_regex(wiadomosc, "\\{'text': u'.*") 给了我整个文本,我怎么能用正则表达式语言“说”我想在“created_at”之前结束?它也会令人满意。

标签: regex r


【解决方案1】:
(?<=text':\su')[^']+|(?<=created_at':\su')[^']+

你可以试试这个。查看演示。

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

【讨论】:

    【解决方案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

    【讨论】:

    • 你是一个真正的正则表达式忍者,@AvinasRaj。我会选择regex101.com/r/vM2vZ5/1 之类的东西,因为' u' 部分也始终是固定的,不需要正则表达式查找。
    猜你喜欢
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 2019-01-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多