【问题标题】:R grepl: combine conditionsR grepl:组合条件
【发布时间】:2020-10-18 11:52:51
【问题描述】:

我是 R 新手,我必须检查字符串是否只包含数字、. 和空格符号。 我的代码版本是:

grepl("\\d+.", x)

但它不起作用。我需要以下结果:

str <- "0. 365" 
str1 <- "S12"

grepl("\\d+.", str) #True
grepl("\\d+.", str1) #False

如何正确组合grepl 的条件?

【问题讨论】:

  • 您还必须转义句号。

标签: r grepl


【解决方案1】:

你说你想检查“如果字符串只包含数字、. 和空格符号”。你没有提到这些字符类型应该出现的顺序。我认为您要查找的顺序是固定的:第一个数字,然后是句点,然后是空格(根据您已接受@Rui 的答案来判断,它适用于固定顺序)。但是,如果顺序是可变的而不是固定的,那么这个正则表达式就可以工作:

数据:

str <- c("0. 365", ".0&0 ", "abc.12 .2", "000. ", "123", "ab.c")

解决方案:

grepl("^(?=.*\\s)(?=.*\\d)(?=.*\\.)[\\s\\d\\.]+$", str, perl = T)
[1]  TRUE FALSE FALSE  TRUE FALSE FALSE

这通过断言 (i) 存在一个空白字符,(ii) 存在一个数字,以及 (iii) 存在一个句点,并且只允许三个字符出现在字符串开头 ^ 和结尾之间字符串$。 (类似情况见How to match strings that only contain a character set in any order and any numbers?

【讨论】:

    【解决方案2】:

    试试这个regex

    str <- c("0. 365", "S12")
    grepl("^[ \\.[:digit:]]*$", str)
    #[1]  TRUE FALSE
    

    【讨论】:

    • 不用在[]内转义.,其实你那里的内容会匹配一个文字“\”
    猜你喜欢
    • 1970-01-01
    • 2019-12-02
    • 2022-10-04
    • 1970-01-01
    • 2022-12-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    相关资源
    最近更新 更多