Groovy extraire la sous-chaîne de caractères avant le caractère
J'ai un tas de cordes, comme
asdf v1.0
jkl v3.04
toutes mes chaînes sont un groupe de caractères suivie d'un espace puis "v", puis un certain nombre. Je veux extraire de chaque chaîne, la partie qui vient avant le " v "et le caractère d'espace précédant le" v " de sorte que:
asdf v1.0 becomes 'asdf'
jkl v3.04 becomes 'jkl'
juste besoin d'un peu d'aide avec cela. J'ai essayé takeWhile { it != 'v' }
mais qui finit par s'y compris l'espace avant le " v " dans la chaîne de résultat que je ne veux pas.
"asdf v1.0".split()[0]
devrait être bon.Cette solution échoue si il y a un espace dans la zone d'entrée de la chaîne. Pour l'entrée
John Kramer v12.2
, qui je présume doit retourner "John Kramer"
, votre solution rendements "John"
OriginalL'auteur Anonymous Human | 2014-11-14
Vous devez vous connecter pour publier un commentaire.
Vous pouvez simplement extraire la sous-chaîne:
Pour obtenir la partie après le
v
:Il me semble que cette solution ne règle pas le problème. Si l'entrée est
Kramer v Kramer v8.8
, je présume que le résultat souhaité serait"Kramer v Kramer"
. Cependant, cette solution serait de retour"Kramer"
.Dans ce cas
String#lastIndexOf
devrait le faire. Mise à jour de la réponse.ce n'est pas vraiment groovy, vous voulez faire quelque chose comme input[0..-entrée.lastIndexOf(" v")-1]
OriginalL'auteur manouti
Je pense que, vu les critères énoncés, que la suivante serait de donner des résultats corrects dans les endroits où la solution choisie ne serait pas:
Des exemples de tests:
"Best v3rsion v3.0"
, voici une meilleure essayez ce qui est sémantiquement la même chose que @manouti de la version mise à jour:(input =~ /(.*) v/)[0][1]
. Gourmand.*
donne le meilleur résultat, car nous avons besoin de la dernièrevX.X
,[0]
est le premier match,[1]
est le premier groupe (les choses dans les parenthèses).OriginalL'auteur BalRog