Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex R grepl-匹配两个字符串_Regex_R - Fatal编程技术网

Regex R grepl-匹配两个字符串

Regex R grepl-匹配两个字符串,regex,r,Regex,R,我在R中使用grep/grepl函数时遇到问题 grepl("[Aa][Bb][Cc]x", c("Abcx", "abCy")) 我得到: [1] TRUE FALSE [1] FALSE TRUE 没关系。同样,对于: grepl("[Aa][Bb][Cc]y", c("Abcx", "abCy")) 我得到: [1] TRUE FALSE [1] FALSE TRUE 而且也没关系。但当我写作时: grepl("[Aa][Bb][Cc]x | [Aa][Bb][Cc]y

我在R中使用grep/grepl函数时遇到问题

grepl("[Aa][Bb][Cc]x", c("Abcx", "abCy"))
我得到:

[1]  TRUE FALSE
[1] FALSE  TRUE
没关系。同样,对于:

grepl("[Aa][Bb][Cc]y", c("Abcx", "abCy"))
我得到:

[1]  TRUE FALSE
[1] FALSE  TRUE
而且也没关系。但当我写作时:

grepl("[Aa][Bb][Cc]x | [Aa][Bb][Cc]y", c("Abcx", "abCy"))
这给了我反直觉的感觉

[1] FALSE FALSE

有什么问题吗?

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

这些空间很重要。您可以使用带有?x修饰符的PCRE正则表达式,这样可以在子模式之间引入一些格式空白,以提高可读性:

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]。

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

这些空间很重要。您可以使用带有?x修饰符的PCRE正则表达式,这样可以在子模式之间引入一些格式空白,以提高可读性:

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]。

…删除|两侧的空格?是的,在注释后意识到我的错误@user22@joran非常感谢。尽管如此,我还是不明白,为什么在正则表达式中有\\s用于键入空格时,它会考虑空格?…删除|两侧的空格?是的,在注释之后才意识到我的错误@user22@joran非常感谢。不过,我还是不明白,为什么在正则表达式中有\\s用于键入空格时,它会考虑空格?谢谢!尽管如此,我还是不明白,为什么在正则表达式中有\\s用于键入空格时,它会考虑空格?或者这是真的,但仅适用于类似perl的表达式?请注意\s代表的不仅仅是文字空间。它可以匹配空格、制表符、换行符和Unicode空格。默认情况下,文本空间是有意义的,没有PCRE base R中的?x修饰符,perl=TRUE和ICU stringr/stringi包regex-flavors。据我所知\s仅代表空格,而不是[:space:]->请参见grepl\\s\\t@user2280549请参见grepl\\s,\t这证明\s=[:空格:]。有关\s的PCRE含义,请参见\s任何空白字符,默认值为HT 9、LF 10、VT 11、FF 12、CR 13和空格32,如果设置了PCRE_UCP选项,则\s匹配与\p{Z}或\h或\v匹配的任何字符。谢谢!尽管如此,我还是不明白,为什么在正则表达式中有\\s用于键入空格时,它会考虑空格?或者这是真的,但仅适用于类似perl的表达式?请注意\s代表的不仅仅是文字空间。它可以匹配空格、制表符、换行符和Unicode空格。默认情况下,文本空间是有意义的,没有PCRE base R中的?x修饰符,perl=TRUE和ICU stringr/stringi包regex-flavors。据我所知\s仅代表空格,而不是[:space:]->请参见grepl\\s\\t@user2280549请参见grepl\\s,\t这证明\s=[:空格:]。有关\s的PCRE含义,请参见\s任何空白字符,默认值为HT 9、LF 10、VT 11、FF 12、CR 13和空格32,如果设置了PCRE_UCP选项,则\s匹配与\p{Z}或\h或\v匹配的任何字符。