【问题标题】:regex in R: Number range after letter at end of stringR中的正则表达式:字符串末尾字母后的数字范围
【发布时间】:2020-08-11 13:01:16
【问题描述】:

我的列名是这样的:

colnames <- c("a81", "b82", "a181", "b182")

我只想提取末尾有 81 或 82 的列,并且在这些数字(81 和 82)之前应该有一个字母。我想在grepl 中使用正则表达式,这里的预期输出是

TRUE TRUE FALSE FALSE

到目前为止我尝试的是

grepl("[:alpha:][81-82]$", colnames)

不幸的是,代码为所有条目返回FALSE。我做错了什么?

【问题讨论】:

    标签: r regex grepl


    【解决方案1】:

    我会去的

    grepl("[a-z](81|82)$", colnames)
    

    [a-z] 表示任何字母,括号组合接下来的 2 个字符中的任何一个:即 81 或 (|) 82。

    【讨论】:

    • 谢谢。这适用于问题中的示例,但对于我的用例,来自 akrun 的答案更方便,因为我的数字范围很广
    【解决方案2】:

    [:alpha:] 需要更改为[[:alpha:]],而不是[81-82],可以是8,后跟[1-2]

    grepl("^[[:alpha:]]8[1-2]$", colnames)
    #[1]  TRUE  TRUE FALSE FALSE
    

    或者我们可以指定

    grepl("^[A-Za-z]8[1-2]$", colnames)
    

    【讨论】:

    • 行得通! This 网站说我们可以使用 [:alpha:]。这是错误的还是在某些情况下也有效?万一你知道..
    • @machine 如果你检查?regex,它说解释取决于语言环境
    • 如果我使用单个[,第二个返回 FALSE
    • @machine 你可以查看here
    • 谢谢!另外,我不知道我们不能使用与[1-8] 相同的[81-82]
    猜你喜欢
    • 1970-01-01
    • 2010-11-23
    • 2011-02-25
    • 1970-01-01
    • 2017-02-14
    • 1970-01-01
    • 2018-06-18
    • 2013-10-30
    相关资源
    最近更新 更多