string = "ABC3JFD456"
Suppose I have the above string, and I wish to find what the first digit in the string is and store its value. In this case, I would want to store the value 3 (since it's the first-occuring digit in the string). grepl("\\d", string) only returns a logical value, but does not tell me anything about where or what the first digit is. Which regular expression should I use to find the value of the first digit?
6 Réponses :
> gregexpr("[[:digit:]]", string)
[[1]]
[1] 4 8 9 10
attr(,"match.length")
[1] 1 1 1 1
attr(,"useBytes")
[1] TRUE
Merci. Maintenant que j'ai l'index, comment puis-je extraire le chiffre de la chaîne? chaîne [4] code> ne fonctionnera pas
RegMatches Code> Tel qu'utilisé par la réponse de David Arenburg serait la méthode de base préférée d'extraction des matchs de regex des cordes que je pense. En outre, regexpr code> supprimerait la nécessité de sous-ensemble les résultats de gregexpr code>
Oui, c'est vrai. Je suis une regex clutz.
base r ou en utilisant ou en utilisant stringi code> p> stringr code > p>
1) SUB STRY> ESSAYER donnant: p> ceci fonctionne également si donnant la même ou utilisez ceci qui donne la même réponse, mais fonctionne également si SUB CODE> avec l'expression régulière indiquée qui prend la chaîne la plus courte jusqu'à un chiffre, un chiffre, puis tout suivi et le remplace avec le chiffre: < Pré> xxx pré> chaîne code> est un vecteur de chaînes. p> < p> strapplyclyclyc code> de gsubfn auquel cas une expression régulière encore plus simple pourrait être utilisée: p> String code> est un vecteur de chaînes: p>
Obtenez les emplacements des chiffres extraire le premier chiffre p> à l'aide de REGEXPR est plus simple p> tmp<-regexpr("[0-9]",string)
if(tmp[[1]]>=0) {
iloc <- tmp[1]
num <- as.numeric(substr(string,iloc,iloc))
}
Ou il suffit d'utiliser regexpr code>, qui ne renvoie que le premier coup de [0-9].
Oui, Regexpr est mieux
A Solution GSUB CODE> basé sur le remplacement des sous-chaînes précédant et suivant le premier chiffre avec la chaîne vide: gsub("^\\D*(?=\\d)|(?<=\\d).*", "", string, perl = TRUE)
# [1] "3"
en utilisant Rex peut faire ce type de tâche un peu Plus simple.
string = c("ABC3JFD456", "ARST4DS324")
re_matches(string,
rex(
capture(name = "first_number", digit)
)
)
#> first_number
#> 1 3
#> 2 4