【问题标题】:Check if a string contain digits and dash检查字符串是否包含数字和破折号
【发布时间】:2017-11-16 12:10:42
【问题描述】:

我正在尝试找到正确的正则表达式来 grepl 天气一个包含数字 [0-9] 和特殊字符“-”的字符串。

例如,

str1="00-25" #TRUE
str2="0a-2" #FALSE

我试过了

grepl("[^[:digit:]|-]",str2)
#[1] TRUE

想法?

【问题讨论】:

  • grepl("^[0-9-]+$", str1)
  • stringi 或其包装器 stringr 这样的包使此类操作更容易
  • 请注意,在字符类中使用 ^ 会否定它。所以[^[:digit:]|-] 告诉匹配任何不是数字的东西,-|(字符类中的交替符号按字面意思解释)。
  • 如果要使用:digit: 或其他类似关键字,请注意基本R 字符串函数通常需要双括号-[[:digit:]]。比较grepl("[:digit:]", "1"); grepl("[[:digit:]]", "1")
  • 谢谢!顺便问一下,+$ 是干什么用的?

标签: r regex grepl


【解决方案1】:

你想检查字符串是否只有数字和-。

要创建合奏,您需要使用“[]”所以:

[0-9-]

现在您要检查字符串的每个字符是否都在您创建的集合中,换句话说,您要开始(^)和完成($ )由这个合奏:

^[0-9-]$

最后在变量中有1个或多个字符,所以我使用“+”:

grepl("^[0-9-]+$",str)

【讨论】:

  • "[0-9-]" 很好(不需要转义连字符,只要它是字符类中的最后一个字符。"[[:digit:]-]" 将起作用也是。
  • 是的,不需要转义——因为它不在字符类的中间。
猜你喜欢
  • 2012-06-12
  • 1970-01-01
  • 2021-10-11
  • 2010-11-14
  • 1970-01-01
  • 1970-01-01
  • 2017-11-02
  • 2012-06-27
  • 2010-09-10
相关资源
最近更新 更多