R grepl - 匹配两个字符串

时间:2016-07-27 14:14:39

标签: regex r

我在使用R中的grep / grepl函数时遇到问题。当我运行

grepl("[Aa][Bb][Cc]x", c("Abcx", "abCy"))

我得到了:

[1]  TRUE FALSE

没关系。同样,对于:

grepl("[Aa][Bb][Cc]y", c("Abcx", "abCy"))

我得到了:

[1] FALSE  TRUE

它也很好。但是当我写道:

grepl("[Aa][Bb][Cc]x | [Aa][Bb][Cc]y", c("Abcx", "abCy"))

它让我反直觉

[1] FALSE FALSE

问题是什么?

1 个答案:

答案 0 :(得分:4)

您需要删除|周围的空格:

grepl("[Aa][Bb][Cc]x|[Aa][Bb][Cc]y", c("Abcx", "abCy"))

这些空间很重要。您可以使用PCRE正则表达式但使用(?x)修饰符(请参阅demo),这样可以在子模式之间引入一些格式化空格,以提高可读性:

grepl("(?x)[Aa][Bb][Cc]x | [Aa][Bb][Cc]y", c("Abcx", "abCy"), perl=TRUE)

或者更好地使用这个较短的版本:

grepl("[Aa][Bb][Cc][xy]", c("Abcx", "abCy"))

模式首先缩小为[Aa][Bb][Cc](x|y),因为这些是单个字符,我建议使用字符类((x|y) - > [xy])。