【问题标题】:R grepl returns different resultR grepl 返回不同的结果
【发布时间】:2019-06-26 04:25:29
【问题描述】:

我正在尝试检查字符串是否遵循特定模式。字符串必须遵循模式 [check(id("numeric only"),"1 of the specified keywords")],其中指定关键字 = D, D5, W1, W2, W3, W4, W5, W6, W0, M , Q1, Q2, Q3, H1, H2, H3, H4, H5, H6, Y1, Y2, A2, Y4, Y5, A3, Y7, Y8, A4, YA, YB, A1。

freq <- c("D", "D5", "W1", "W2", "W3", "W4", "W5", "W6", "W0", "M", "Q1", 
           "Q2", "Q3", "H1", "H2", "H3", "H4", "H5", "H6", "Y1", "Y2", "A2", 
           "Y4", "Y5", "A3", "Y7", "Y8", "A4", "YA", "YB", "A1")
> grepl("\\<check\\(id\\(+\\d+\\),\\bA1\\b|\\bA2\\b\\)\\>", "check(id(32131241w),A1)")
[1] FALSE

> grepl("\\<check\\(id\\(+\\d+\\),\\bA1\\b|\\bA2\\b\\)\\>", "check(id(32131241),A1)")
[1] TRUE

> grepl("\\<check\\(id\\(+\\d+\\),\\b", paste0(freq, collapse = "\\b|\\b"), "\\b\\)\\>", "check(id(32131241w),A1)")
[1] FALSE

> grepl("\\<check\\(id\\(+\\d+\\),\\b", paste0(freq, collapse = "\\b|\\b"), "\\b\\)\\>", "check(id(32131241),A1)")
[1] FALSE

第一个、第二个和第三个输出是正确的结果,但是我希望第四个结果是 TRUE,但 R 返回的是 FALSE。

【问题讨论】:

    标签: r grepl


    【解决方案1】:
    #Second line from you
    grepl("\\<check\\(id\\(+\\d+\\),\\bA1\\b|\\bA2\\b\\)\\>", "check(id(32131241),A1)")
    #TRUE
    
    #Change A1 to A2
    grepl("\\<check\\(id\\(+\\d+\\),\\bA1\\b|\\bA2\\b\\)\\>", "check(id(32131241),A2)")
    #FALSE
    
    #Adding surrounding <>
    grepl("\\<check\\(id\\(+\\d+\\),\\bA1\\b|\\bA2\\b\\)\\>", "<check(id(32131241),A2)>")
    #FALSE
    
    #Adding perl=TRUE
    grepl("\\<check\\(id\\(+\\d+\\),\\bA1\\b|\\bA2\\b\\)\\>", "<check(id(32131241),A2)>", perl=TRUE)
    #TRUE
    
    #Add () arround |
    grepl("\\<check\\(id\\(+\\d+\\),(\\bA1\\b|\\bA2\\b)\\)\\>", "<check(id(32131241),A2)>", perl=TRUE)
    #TRUE
    
    #Here you have to add one additional paste
    grepl(paste0("\\<check\\(id\\(+\\d+\\),(\\b", paste0(freq, collapse = "\\b|\\b"), "\\b)\\)\\>"), "<check(id(32131241),A1)>", perl=TRUE)
    #TRUE
    

    【讨论】:

    • 非常感谢,最终的代码就像一个魅力!
    猜你喜欢
    • 2020-02-17
    • 1970-01-01
    • 2021-09-21
    • 2019-01-18
    • 2012-11-30
    • 2019-06-03
    • 2013-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多