量词{n,m}前面的项目至少匹配n次,但不超过m次在R中不起作用

时间:2014-08-11 09:14:16

标签: regex r

我的代码是

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

2 个答案:

答案 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