Regex 意外的R正则表达式求值

Regex 意外的R正则表达式求值,regex,r,Regex,R,我正在使用一个在线的正则表达式测试工具()处理一些正则表达式,以帮助理解语法。然而,当我尝试评估R中的模式时,我得到的结果与我预期的不同 代码是: grepl("Brent[^a-zA-Z]", c("Brent", "Brentwood", "Brent 01")) 我期望:TRUE,FALSE,TRUE,这是我通过在线测试仪得到的结果。但是R返回FALSE,FALSE,TRUE 这里缺少什么?第一个字符串无法匹配,因为[^a-zA-Z]必须只使用一个字符 您可以将其替换为\b(单词边界):

我正在使用一个在线的正则表达式测试工具()处理一些正则表达式,以帮助理解语法。然而,当我尝试评估R中的模式时,我得到的结果与我预期的不同

代码是:

grepl("Brent[^a-zA-Z]", c("Brent", "Brentwood", "Brent 01"))
我期望:
TRUE,FALSE,TRUE
,这是我通过在线测试仪得到的结果。但是R返回
FALSE,FALSE,TRUE


这里缺少什么?

第一个字符串无法匹配,因为
[^a-zA-Z]
必须只使用一个字符

您可以将其替换为
\b
(单词边界):
\bBrent\b


而且,如果你想允许像
Brent01
(在
01
之前没有空格)这样的字符串,你可以使用lookaheads:
\bBrent(?![a-zA-Z])
(但我不知道这个功能在R中是否可用)。

试试
Brent(?[^a-zA-Z]|$)
Avinash上面的解决方案同样有效,但我喜欢lookahead版本。唯一的诀窍是必须向grepl函数添加选项
perl=TRUE