繁体   English   中英

R grepl-匹配两个字符串

[英]R grepl - matching two strings

我在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

有什么问题?

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

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

这些空间很重要。 您可以使用带有(?x)修饰符的PCRE正则表达式(请参见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] )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM