我在将模式与R
中的文本字符串匹配时遇到一些问题。
当文本类似于TRUE
时,我正在尝试使用grepl
获得"lettersornumbersorspaces y lettersornumbersorspaces".
我正在使用以下regex
:
([:alnum:]|[:blank:])+[:blank:][yY][:blank:]([:alnum:]|[:blank:])+
如下使用
regex
获取“地址”时,它可以正常工作。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"
谢谢!!
最佳答案
尽管Stringer ICU regex引擎在模式中支持裸POSIX字符类,但在基本R regex风格(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
见online demo
单独使用
[:alnum:]
时,它是一个简单的括号表达式,它与单个字符,:
,a
,l
,n
,u
和m
匹配。模式详细信息:
[[:alnum:][:blank:]]+
-1+字母数字或水平空白符号[[:blank:]]
-1个水平空白符号[yY]
-y
或Y
[[:blank:]]
-1个水平空白符号[[:alnum:][:blank:]]+
-1+字母数字或水平空白符号