首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >查找单词匹配,允许在R中最多分隔n个单词

查找单词匹配,允许在R中最多分隔n个单词
EN

Stack Overflow用户
提问于 2018-03-06 00:52:55
回答 2查看 138关注 0票数 1

希望在word2之前匹配word1,允许在word1和word2之间最多分隔5个单词。例如,如果word1是苹果,word2是芒果,那么模式应该匹配“apple是像芒果一样的水果”,但不匹配“芒果是像苹果一样的水果”(word2在word1之前)或“苹果和橙子是水果,像芒果”(长度超过5个单词)。python中的正则表达式示例是\b(?:word1\W+(?:\w+\W+){0,5}?word2|word2\W+(?:\w+\W+){0,5}?word1)\b。在R中识别此模式的类似模式和功能是什么?

EN

回答 2

Stack Overflow用户

发布于 2018-03-06 01:01:20

代码语言:javascript
复制
#DATA
word1 = "apple"
word2 = "mango"
p1 = "apple is a fruit like mango"
p2 = "apple and orange are fruits, like mango"
p3 = "mango is a fruit like apple"

#FUNCTION
foo = function(word1, word2, string){
    ind2 = unlist(gregexpr(word2, string))[1]
    ind1 = unlist(gregexpr(word1, string))[1] 
    nwords = length(unlist(gregexpr(" ", substr(string, ind1, ind2))))
    if(ind2 > ind1 & nwords <= 5){
        substr(string, ind1, ind2 + nchar(word2))
    }else{
        NA
    }
}

#USAGE
foo(word1, word2, p1)
#[1] "apple is a fruit like mango"

foo(word1, word2, p2)
#[1] NA

foo(word1, word2, p3)
#[1] NA
票数 1
EN

Stack Overflow用户

发布于 2018-03-06 01:18:47

这个可以用。将第一个单词计数为apple,此正则表达式搜索下一个4个单词,如果在定义的单词限制中找到芒果,则进行匹配。

代码语言:javascript
复制
library(stringr)
> stri <- c('apple is a fruit like mango','apple and orange are fruits, like mango','apple is not a fruit like orange or mango')
> stri_extract_all(str = stri, regex = 'apple(\\s\\w+){1,4}?.mango')

[[1]]
[1] "apple is a fruit like mango"

[[2]]
[1] NA

[[3]]
[1] NA
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49115551

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档