我的代码是
strings <- c("a","aa","aaa", "aaaa-EA","aaaaaa-EA")
pattern = "a{2,4}-EA$"
grepl(pattern,strings,perl=TRUE)
输出为:FALSE FALSE FALSE TRUE TRUE
理想情况下,我应该FALSE FALSE FALSE TRUE FALSE
答案 0 :(得分:3)
您需要添加^
以指示字符串的开头:
> pattern <- "^a{2,4}-EA$"
> grepl(pattern, strings)
[1] FALSE FALSE FALSE TRUE FALSE
否则模式匹配与位置无关。
答案 1 :(得分:1)
正如Sven所指出的那样,当你没有指定字符串的开头时,带有5个字符串的字符串有一个带有4个字符串的子字符串可以匹配。
或者,你可以使用断言后面的负面看法来确保你只匹配最多4:
grepl("(?<!a)a{2,4}-EA$",strings,perl=TRUE)
[1] FALSE FALSE FALSE TRUE FALSE