estrai il numero dopo una stringa specifica

Devo trovare il numero dopo la stringa “Count of”. Potrebbe esserci uno spazio o un simbolo tra la stringa “Numero di” e il numero. Ho qualcosa che funziona su www.regex101.com ma non funziona con stringr str_extract .

 library(stringr) shopping_list <- c("apples x4", "bag of flour", "bag of sugar", "milk x2", "monkey coconut 3oz count of 5", "monkey coconut count of 50", "chicken Count Of-10") str_extract(shopping_list, "count of ([\\d]+)") [1] NA NA NA NA "count of 5" "count of 50" NA 

Quello che voglio ottenere:

 [1] NA NA NA NA "5" "50" "10" 

 str_extract(shopping_list, "(?i)(?<=count of\\D)\\d+") # [1] NA NA NA NA "5" "50" "10" 

dove (?i) rende insensibile la distinzione tra maiuscole e minuscole, \\D indica non un numero e ?<= è un aspetto positivo.

Guardare avanti e guardare dietro è quello che stai cercando con questo grep …

 shopping_list <- c("apples x4", "bag of flour", "bag of sugar", "milk x2", "monkey coconut 3oz count of 5", "monkey coconut count of 50", "chicken Count Of-10") str_extract(shopping_list, "(?<=count of )[0-9]*") [1] NA NA NA NA "5" "50" NA 
 as.numeric(sub("(?i).*count of.*?(\\d+).*", "\\1", shopping_list)) [1] NA NA NA NA 5 50 10 

Il modello regex è:

  • (?i) : Ignora caso
  • .*count of.*? : Qualsiasi lunghezza di caratteri fino al “conteggio di”
  • (\\d+) : acquisisce una o più cifre
  • "\\1" : restituisce il gruppo di acquisizione

A partire da ora le altre risposte falliranno con qualcosa come ""coconut count of - 5" poiché sono vincolati da uno spazio dopo” il conteggio di “.