agrepl不适用于正则表达式

时间:2016-04-30 04:22:21

标签: regex r

我需要使用正则表达式在字符串中进行部分匹配。我可以得到准确的:

pattern <- "(^| )shower only($| )"

stringInQuestion<-"Delta Vero 1-Handle Shower Only Faucet Trim Kit in Chrome"

grepl(pattern,stringInQuestion, ignore.case=TRUE,perl=TRUE)

[1] TRUE

agrepl(pattern,stringInQuestion, ignore.case=TRUE,fixed = FALSE, max.distance=0.2)

[1] FALSE

仅适用于普通字符串:

agrepl("shower only",stringInQuestion, ignore.case=TRUE,fixed = FALSE, max.distance=0.2)

有人可以帮我弄清楚发生了什么事吗?

1 个答案:

答案 0 :(得分:0)

由于您打算只检查整个单词的存在,我建议将模式缩小为

pattern <- "\\bshower only\\b"

请参阅max.distance参数的官方说明:

  

max.distance
  匹配所允许的最大距离。表示为整数,或作为 分数 的模式长度乘以最大变换cost (将被最小的变换替换)整数不小于相应的分数),或具有可能组件的列表

0.2允许将短语与错误匹配,例如Showerrrrr Only,但不匹配Showerrrrrr Only。见working demo

pattern <- "\\bshower only\\b"
stringInQuestion<-"Delta Vero 1-Handle Shower Only Faucet Trim Kit in Chrome"
grepl(pattern,stringInQuestion, ignore.case=TRUE,perl=TRUE)
agrepl(pattern,stringInQuestion, ignore.case=TRUE,fixed = FALSE, max.distance=0.2)
## [1] TRUE
## [1] TRUE

请注意,max.distance应根据您的实际输入进行测试,并相应调整。