Voici une approche avec la base R et des expressions régulières.
grepRaw
fournit la position de chaque motif regex correspondant (avec l'argument all = TRUE
). La longueur de ce résultat fournit le nombre de correspondances.
d <- c("
Limited compatibility Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla maximus lobortis
tellus quis egestas. Donec non dignissim urna. Praesent at commodo ligula.
Cras laoreet limited compatibility interdum mi nec euismod. Ut interdum odio non sem luctus iaculis. Mauris id sapien limited X XXXX compatibility accumsan, imperdiet justo non,limited compatibility egestas felis. Morbi commodo lectus limited X compatibility scelerisque limited XXX compatibility est bibendum, vel varius tellus vulputate. Aenean dictum accumsan limited X compatibility neque limited X X compatibility sed dictum. Vivamus finibus lacus sit amet iaculis molestie. Fusce enim limited X compatibility sapien, iaculis quis leo non, pellentesque lobortis arcu. Proin commodo limited X XXX XXXXX compatibility velit placerat venenatis mattis. Limited compatibility Curabitur et laoreet ipsum. Limited compatibility
")
> length(grepRaw("Limited compatibility", d, ignore.case = TRUE, all = TRUE))
[1] 5
> length(grepRaw("limited \\w+ compatibility", d, ignore.case = TRUE, all = TRUE))
[1] 4
> length(grepRaw("limited (\\w+){2}compatibility", d, ignore.case = TRUE, all = TRUE))
[1] 2
> length(grepRaw("limited (\\w+){3}compatibility", d, ignore.case = TRUE, all = TRUE))
[1] 1
Le regex suivant correspond à motif « compatibilité neque compatibilité XX limitée limitée X » et ce n'est pas le comportement entended
> length(grepRaw("limited (\\w+){6}compatibility", d, ignore.case = TRUE, all = TRUE))
[1] 1
Peut-être plus sûr alors de placer tous les « compatibilité limitée xx » sur une seule ligne :
d <- gsub("Limited", "\nLimited", d, ignore.case = TRUE)
d <- gsub("compatibility", "compatibility\n", d, ignore.case = TRUE)
# writeLines(d)
Ceci est maintenant correct
> length(grepRaw("limited (\\w+){6}compatibility", d, ignore.case = TRUE, all = TRUE))
[1] 0