我需要使用正则表达式在字符串中进行部分匹配。我可以得到准确的:
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)
有人可以帮我弄清楚发生了什么事吗?
答案 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
应根据您的实际输入进行测试,并相应调整。