Extrait une sous-chaîne d'une chaîne de caractères en Ruby à l'aide d'une expression régulière
Comment puis-je extraire une sous-chaîne dans une chaîne de caractères en Ruby?
Exemple:
String1 = "<name> <substring>"
Je veux extraire substring
de String1
(c'est à dire tout à l'intérieur de la dernière occurrence de <
et >
).
Vous devez vous connecter pour publier un commentaire.
scan
crée un tableau qui, pour chaque<item>
dansString1
contient le texte entre les<
et la>
dans un élément de tableau (parce que lorsqu'il est utilisé avec une regex contenant la capture de groupes, de numérisation crée un tableau contenant les captures pour chaque match).last
vous donne la dernière de ces tableaux etfirst
vous donne ensuite la chaîne en elle.Pas besoin d'utiliser
scan
, si nous avons besoin d'un seul résultat.Pas besoin d'utiliser
match
, lorsque nous avonsString[regexp,#]
.Voir: http://ruby-doc.org/core/String.html#method-i-5B-5D
Remarque:
str[regexp, capture] → new_str or nil
if we need only one result
dans ma solution. Etmatch()[]
est plus lent, parce que c'est deux méthodes au lieu d'un.string[regex]
peut être tout aussi lisible dans ce scénario, c'est ce que j'utilise personnellement.Vous pouvez utiliser une expression régulière pour que assez facilement...
Permettant espaces autour de la parole (mais pas les garder):
Ou sans les espaces autorisés:
<>
doit être la dernière chose dans la chaîne. Si par exemple la chaîne defoo <bar> baz
est autorisé (et censé donner le résultatbar
), cela ne fonctionnera pas.Ici est un peu plus souple en utilisant l'approche de
match
méthode. Avec cela, vous pouvez extraire plus d'une corde:Un simple scan serait: