【问题标题】:Writing a function to return the nth group of numbers in a phone number编写一个函数以返回电话号码中的第 n 组数字
【发布时间】:2020-04-26 21:53:13
【问题描述】:

例如,函数应该是:function_name(phonenumber, n)

  • function_name(123-456-7890, 1) 应该返回 123
  • function_name((123)-456-7890, 3) 应该返回 7890

【问题讨论】:

  • 你尝试了什么?你在哪里卡住?您需要匹配多少种不同的号码类型?这是否有助于您开始:stackoverflow.com/questions/31172751/…
  • broncos24,欢迎您使用 SO,但您开始展示的模式与 StackOverflow 上的“规范”并不完全一致(至少在 r 频道内)。 (1) 请接受答案(而不仅仅是投票)。 (2)先自己做一些研究,请不要将“在SO上提出问题”视为您的第一次网络搜索。 (3) 当您提出问题时,请提供(远远)不仅仅是简洁的要求,包括示例数据、预期输出以及您之前尝试过的代码。在这里非常欢迎您,但请尊重我们自愿提供的时间。

标签: r


【解决方案1】:
function_name <- function(phone, n) Filter(nzchar, strsplit(phone, "\\D+")[[1]])[n]
function_name("123-456-7890", 1)
# [1] "123"
function_name("(123)-456-7890", 3)
# [1] "7890"

【讨论】:

    【解决方案2】:

    一个基本 R 选项是使用 regmatches

    function_name <- function(phonenumber, n) regmatches(phonenumber,gregexpr("\\d+",phonenumber))[[1]][n]
    

    【讨论】:

    • 我认为这个对于看起来不像电话号码的字符串可能更健壮一些。
    【解决方案3】:

    我们可以通过-拆分,然后提取'nth'组

    f1 <- function(phonenumber, n){
                 setdiff(strsplit(phonenumber, '[[:punct:]]+')[[1]], "")[n]
        }
    
    f1('123-456-7890', 3)
    #[1] "7890"
    
    f1('(123)-456-7890', 3)
    #[1] "7890"
    

    【讨论】:

    • @broncos24 抱歉,没有看到这种情况。更新了帖子。感谢通知
    • 有没有办法用 str_detect 或 str_view 做到这一点
    【解决方案4】:

    您可以使用\\w+\\d+

    get_nth_group <- function(x, n) stringr::str_extract_all(x, '\\w+')[[1]][n]
    
    get_nth_group("123-456-7890", 1)
    #[1] "123"
    
    get_nth_group("(123)-456-7890", 3)
    #[1] "7890"
    

    【讨论】:

      【解决方案5】:

      我会建议这样的事情:

      library(tidyverse)
      
      get_phone_group <- function(phonenum, n) {
        str_extract_all(phonenum, "\\d+", simplify = TRUE)[, n]
      }
      
      get_phone_group("123-456-7890", 1)
      #> [1] "123"
      get_phone_group("(123)-456-7890", 3)
      #> [1] "7890"
      get_phone_group(c("345-169-234", "(123)-456-7890"), 3)
      #> [1] "234"  "7890"
      

      reprex package (v0.3.0) 于 2020-04-27 创建

      请注意,生成的函数是矢量化的,因此很适合在例如mutate 上下文。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-02
        • 1970-01-01
        • 1970-01-01
        • 2017-01-14
        • 1970-01-01
        • 2021-12-17
        • 2011-11-05
        • 1970-01-01
        相关资源
        最近更新 更多