【问题标题】:Regex in R -- extracting sub-string based on two start/stop wordsR中的正则表达式——基于两个开始/停止词提取子字符串
【发布时间】:2016-11-14 17:05:14
【问题描述】:

我有一个字符(文本)列:

tweets <- c(
    "Drinking a Bud Light by @Budweiser @ Joe's Crab Shack http://www.joes.com",
    "Drinking a Sam Adams Winter Ale by @SamAdams @ Growler Stop http://www.growlerstop.com",
    "Drinking a Coco Loco by @NoDaBrewing @ The Corner Pub http://www.cornerpub.com"
)

如您所见,假设推文具有标准结构:

"Drinking a [name of beer] by @[name of brewery] @ [name of bar, notice whitespace] http://"

我想使用正则表达式(和substr()?)来创建三个新列:

  1. 啤酒名称
  2. 啤酒厂名称
  3. 栏的名称(注意可能有空格,所以需要转到“http:”)

更进一步 - 我如何控制一些结构不同的推文?

【问题讨论】:

    标签: regex r twitter


    【解决方案1】:

    很丑:

    setNames(nm=c('beer','brewery','bar'),as.data.frame(do.call(rbind,
        regmatches(tweets,regexec('^Drinking an? (.*) by @(.*) @ (.*) http://.*$',tweets))
    )[,-1L]));
    ##                   beer     brewery              bar
    ## 1            Bud Light   Budweiser Joe's Crab Shack
    ## 2 Sam Adams Winter Ale    SamAdams     Growler Stop
    ## 3            Coco Loco NoDaBrewing   The Corner Pub
    

    请参阅 regexec()regmatches()

    【讨论】:

      【解决方案2】:
          do.call(rbind,strsplit(gsub('.*\\ba\\b(.*) by @(.*) @(.*) http.*','\\1|\\2|\\3',tweets),'\\|'))
      
      #       [,1]                    [,2]          [,3]               
      #[1,] " Bud Light"            "Budweiser"   " Joe's Crab Shack"
      #[2,] " Sam Adams Winter Ale" "SamAdams"    " Growler Stop"    
      #[3,] " Coco Loco"            "NoDaBrewing" " The Corner Pub" 
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-02-24
        • 2012-12-19
        • 1970-01-01
        • 2020-08-19
        • 1970-01-01
        • 2021-12-24
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多