Regex 意外的R正则表达式求值
我正在使用一个在线的正则表达式测试工具()处理一些正则表达式,以帮助理解语法。然而,当我尝试评估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(单词边界):
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
。