【问题标题】:R extract everything after = regexR 在 = regex 之后提取所有内容
【发布时间】:2021-05-31 06:45:32
【问题描述】:

我在一列中有一堆 url,我需要创建一个新变量来为每个 url 提取特定的唯一 id。唯一 id 出现在等号之后。例如:

https://website.com/locationDetails.php?l=29A5CDCA-7D0F-4FAA-906C-00DA90EBFD13

所以唯一的 id 变量将是:29A5CDCA-7D0F-4FAA-906C-00DA90EBFD13

我想我可以通过 str_extract 使用正则表达式来做到这一点

data %>% 
  mutate(unique_id = str_extract(url, " ")) 

【问题讨论】:

    标签: r regex stringr


    【解决方案1】:

    假设所有 URL 都只有 一个 查询参数,您可以在这里使用sub

    url <- "https://website.com/locationDetails.php?l=29A5CDCA-7D0F-4FAA-906C-00DA90EBFD13"
    param <- sub("^.*=", "", url)
    param
    
    [1] "29A5CDCA-7D0F-4FAA-906C-00DA90EBFD13"
    

    假设可能有多个查询参数,并且您希望将一个标记为l,那么我们可以将sub 与捕获组一起使用:

    url <- "https://website.com/locationDetails.php?l=29A5CDCA-7D0F-4FAA-906C-00DA90EBFD13"
    param <- sub("^.*\\bl=(.*?)(?=&|$)", "\\1", url, perl=TRUE)
    param
    
    [1] "29A5CDCA-7D0F-4FAA-906C-00DA90EBFD13"
    

    【讨论】:

      【解决方案2】:
      • 将所有内容匹配到第一个 =,然后捕获组中的所有内容。
      str <- 'https://website.com/locationDetails.php?l=29A5CDCA-7D0F-4FAA-906C-00DA90EBFD13'
      
      gsub('^[^\\=]*\\=(.*)$', '\\1', str)
      #> [1] "29A5CDCA-7D0F-4FAA-906C-00DA90EBFD13"
      

      reprex package (v2.0.0) 于 2021-05-31 创建

      【讨论】:

        【解决方案3】:

        使用str_extract -

        url <- 'https://website.com/locationDetails.php?l=29A5CDCA-7D0F-4FAA-906C-00DA90EBFD13'
        stringr::str_extract(url, '(?<==).*')
        #[1] "29A5CDCA-7D0F-4FAA-906C-00DA90EBFD13"
        

        相同
        stringr::str_match(url, '=(.*)')[, 2]
        

        【讨论】:

        • 添加 '=(.*)$' 是否是多余的,因为 * 已经匹配所有内容?
        • 也许是的,这是多余的,但我认为它也更安全。
        猜你喜欢
        • 2021-11-24
        • 2022-06-28
        • 2015-11-11
        • 2019-11-19
        • 1970-01-01
        • 2023-04-03
        • 1970-01-01
        • 2020-01-25
        • 1970-01-01
        相关资源
        最近更新 更多