【问题标题】:Check if string contains anything but numbers检查字符串是否包含除数字以外的任何内容
【发布时间】:2016-01-26 17:13:47
【问题描述】:

如果字符串仅包含数字 (0-9) 或其他任何内容并返回真/假,我正在寻找正确的表达式来搜索字符串。

我要做的是:

> teststring <- "012345c6789"
> any(str_detect(teststring,c(letters,LETTERS)))
[1] TRUE

但这只检查字母,我想要正确的表达式来检查字符串中是否有任何字符不是数字。

【问题讨论】:

  • 如果给出的任何答案都能解决您的问题,您能接受吗?阻止其他人花时间在上面。
  • 您必须等待 10 分钟才能接受答案..

标签: r string


【解决方案1】:

你可以否定这个模式..

!grepl('[0-9]|^$', string)

【讨论】:

    【解决方案2】:

    我们可以使用该模式仅匹配一个或多个非数字元素 ([^0-9]+) 从开头 (^) 到结尾 ($)grepl 的字符串。

    grepl('^[^0-9]+$', teststring)
    

    【讨论】:

      【解决方案3】:

      您可以尝试不使用正则表达式,只需转换为数字:

      containsOnlyNumbers = function(x) !is.na(as.numeric(x))
      
      str1 <- "012345c6789"
      str2 <- "016789"
      
      #> containsOnlyNumbers(str1)
      #[1] FALSE
      #Warning message:
      #In containsOnlyNumbers(str1) : NAs introduced by coercion
      #> containsOnlyNumbers(str2)
      #[1] TRUE
      

      【讨论】:

      • 这应该会更快,尽管在像“+911”这样的情况下可能不是那么健壮
      • 哼这个特殊情况实际上是模棱两可的......它可以被认为是一个数字..取决于OP的想法。但确实很好地提高了(与减号相同)
      【解决方案4】:

      这对你有用

       teststring <- "012345c6789"
       teststring1 <- "0123456789"
      
       > suppressWarnings({is.na(as.numeric(teststring))})
       > TRUE
      
       > uppressWarnings({is.na(as.numeric(teststring1))})
       > FALSE
      

      【讨论】:

      • 转换为数字是一个不错的选择,感谢您的快速解决方案。
      • 同时发布,我详细说明了太多;)您可以通过添加! 来编辑您的答案,因为您在第一种情况下需要FALSE,在第二种情况下需要TRUE。我要删除我的以避免重复,即使有 20 秒的单圈时间;)
      • 但在他的示例中,当字符串不只包含数字时,他返回TRUE
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多