POSIX 字符类在基本 R 正则表达式中不起作用

M.P*_*ico 4 regex r pattern-matching grepl

我在将模式与 中的文本字符串匹配时遇到一些问题R

当文字类似于以下内容时,我正在尝试TRUE理解grepl"lettersornumbersorspaces y lettersornumbersorspaces".

我正在使用以下内容regex

([:alnum:]|[:blank:])+[:blank:][yY][:blank:]([:alnum:]|[:blank:])+
Run Code Online (Sandbox Code Playgroud)

当使用regex如下方法获取“地址”时,它会按预期工作。

regex <- "([:alnum:]|[:blank:])+[:blank:][yY][:blank:]([:alnum:]|[:blank:])+"
address <- str_extract(fulltext, regex)
Run Code Online (Sandbox Code Playgroud)

我看到该地址就是我需要的文本。现在,如果我想使用如下方式grepl获取TRUE

grepl("([:alnum:]|[:blank:])+[:blank:][yY][:blank:]([:alnum:]|[:blank:])+", address,ignore.case = TRUE)
Run Code Online (Sandbox Code Playgroud)

FALSE被返回。这怎么可能?我正在使用相同的方法regex来获取TRUE. 我尝试过修改参数grepl,但没有一个与此相关。

文本示例如下:"26 de Marzo y Pareyra de la Luz"

谢谢!!

Wik*_*żew 5

尽管stringr ICU 正则表达式引擎支持模式中的裸 POSIX 字符类,但在基本 R 正则表达式风格(PCRE ( perl=TRUE) 和 TRE)中,POSIX 字符类必须位于方括号表达式内[:alnum:]-> [[:alnum:]]

\n\n
x <- c("AZaz09 y AZaz09", "\xc4\x84\xc5\xbbaz09 y AZ\xc5\x81\xc5\x8209", "26 de Marzo y Pareyra de la Luz")\ngrepl("[[:alnum:][:blank:]]+[[:blank:]][yY][[:blank:]][[:alnum:][:blank:]]+", x)\n## => [1] TRUE TRUE TRUE\ngrepl("[[:alnum:][:blank:]]+[[:blank:]][yY][[:blank:]][[:alnum:][:blank:]]+", x, perl=TRUE)\n## => [1] TRUE TRUE TRUE\n
Run Code Online (Sandbox Code Playgroud)\n\n

查看在线演示

\n\n

单独使用时,它是一个简单的括号[:alnum:]表达式,匹配单个:字符,a ,,,,,,,alnum单独

\n\n

图案详情

\n\n
    \n
  • [[:alnum:][:blank:]]+- 1+ 个字母数字或水平空白符号
  • \n
  • [[:blank:]]- 1 个水平空白符号
  • \n
  • [yY] - 两者y任一Y
  • \n
  • [[:blank:]]- 1 个水平空白符号
  • \n
  • [[:alnum:][:blank:]]+- 1+ 个字母数字或水平空白符号
  • \n
\n