POSIX 字符 class 在基本 R 正则表达式中不起作用
POSIX character class does not work in base R regex
我在将模式与 R
中的文本字符串匹配时遇到一些问题。
当文本类似于 "lettersornumbersorspaces y lettersornumbersorspaces".
时,我正在尝试使用 grepl
获取 TRUE
我正在使用以下 regex
:
([:alnum:]|[:blank:])+[:blank:][yY][:blank:]([:alnum:]|[:blank:])+
当如下使用 regex
获得 "address" 时,它按预期工作。
regex <- "([:alnum:]|[:blank:])+[:blank:][yY][:blank:]([:alnum:]|[:blank:])+"
address <- str_extract(fulltext, regex)
我看到地址是我需要的文本。现在,如果我想使用 grepl
得到一个 TRUE
如下:
grepl("([:alnum:]|[:blank:])+[:blank:][yY][:blank:]([:alnum:]|[:blank:])+", address,ignore.case = TRUE)
FALSE
返回。这怎么可能?我使用相同的 regex
来获得 TRUE
。我尝试修改 grepl
参数,但没有一个与此相关。
文本示例为:"26 de Marzo y Pareyra de la Luz"
谢谢!!
尽管 stringr ICU 正则表达式引擎在模式中支持裸 POSIX 字符 类,但在基本 R 正则表达式风格中(PCRE(perl=TRUE
) 和 TRE), POSIX 字符 类 必须在括号表达式 内。 [:alnum:]
-> [[:alnum:]]
.
x <- c("AZaz09 y AZaz09", "ĄŻaz09 y AZŁł09", "26 de Marzo y Pareyra de la Luz")
grepl("[[:alnum:][:blank:]]+[[:blank:]][yY][[:blank:]][[:alnum:][:blank:]]+", x)
## => [1] TRUE TRUE TRUE
grepl("[[:alnum:][:blank:]]+[[:blank:]][yY][[:blank:]][[:alnum:][:blank:]]+", x, perl=TRUE)
## => [1] TRUE TRUE TRUE
单独使用[:alnum:]
时,是匹配单个字符的简单括号表达式,一个:
、a
、l
、n
, u
, m
.
图案详情:
[[:alnum:][:blank:]]+
- 1+ 个字母数字或水平空白符号
[[:blank:]]
- 1 个水平空白符号
[yY]
- y
或 Y
[[:blank:]]
- 1 个水平空白符号
[[:alnum:][:blank:]]+
- 1+ 个字母数字或水平空白符号
我在将模式与 R
中的文本字符串匹配时遇到一些问题。
当文本类似于 "lettersornumbersorspaces y lettersornumbersorspaces".
grepl
获取 TRUE
我正在使用以下 regex
:
([:alnum:]|[:blank:])+[:blank:][yY][:blank:]([:alnum:]|[:blank:])+
当如下使用 regex
获得 "address" 时,它按预期工作。
regex <- "([:alnum:]|[:blank:])+[:blank:][yY][:blank:]([:alnum:]|[:blank:])+"
address <- str_extract(fulltext, regex)
我看到地址是我需要的文本。现在,如果我想使用 grepl
得到一个 TRUE
如下:
grepl("([:alnum:]|[:blank:])+[:blank:][yY][:blank:]([:alnum:]|[:blank:])+", address,ignore.case = TRUE)
FALSE
返回。这怎么可能?我使用相同的 regex
来获得 TRUE
。我尝试修改 grepl
参数,但没有一个与此相关。
文本示例为:"26 de Marzo y Pareyra de la Luz"
谢谢!!
尽管 stringr ICU 正则表达式引擎在模式中支持裸 POSIX 字符 类,但在基本 R 正则表达式风格中(PCRE(perl=TRUE
) 和 TRE), POSIX 字符 类 必须在括号表达式 内。 [:alnum:]
-> [[:alnum:]]
.
x <- c("AZaz09 y AZaz09", "ĄŻaz09 y AZŁł09", "26 de Marzo y Pareyra de la Luz")
grepl("[[:alnum:][:blank:]]+[[:blank:]][yY][[:blank:]][[:alnum:][:blank:]]+", x)
## => [1] TRUE TRUE TRUE
grepl("[[:alnum:][:blank:]]+[[:blank:]][yY][[:blank:]][[:alnum:][:blank:]]+", x, perl=TRUE)
## => [1] TRUE TRUE TRUE
单独使用[:alnum:]
时,是匹配单个字符的简单括号表达式,一个:
、a
、l
、n
, u
, m
.
图案详情:
[[:alnum:][:blank:]]+
- 1+ 个字母数字或水平空白符号[[:blank:]]
- 1 个水平空白符号[yY]
-y
或Y
[[:blank:]]
- 1 个水平空白符号[[:alnum:][:blank:]]+
- 1+ 个字母数字或水平空白符号