2
votes

Comment fractionner correctement avec plusieurs traits de soulignement?

Je me demandais comment diviser correctement la chaîne lorsque vous avez un nombre inconnu de traits de soulignement. Mon entrée ressemble à ceci:

details = input.split("_")
words = details[0]
numbers = details[1]

Entre les mots et les nombres, il y a un nombre inconnu de traits de soulignement. Je dois diviser cette entrée en mots et en chiffres. J'ai essayé d'utiliser split de cette manière:

One Two_________1.0 2.0 3.0
Three Four______4.0 5.0 6.0
Five Six________7.0 8.0 9.0

Cependant, il ne sauvegarde correctement que les mots. Cela a fonctionné lorsque j'ai changé l'entrée pour n'avoir qu'un seul trait de soulignement, mais je ne peux tout simplement pas trouver la solution quand il a plusieurs traits de soulignement.


3 Réponses :


5
votes

Vous pouvez utiliser des expressions régulières pour cela.

import re
re.split('_+', 'asd___fad')
>>> ['asd', 'fad']

Fondamentalement, cela signifie "fractionner lorsque vous voyez un trait de soulignement (le trait de soulignement dans le premier argument de split ) ou plus (le plus suivant ce trait de soulignement)"


1 commentaires

Merci, cela a complètement résolu le problème! Cette solution était facile à implémenter dans mon programme et était claire à utiliser.



0
votes

utilisez l'indexation négative. C'EST À DIRE. nombres = détails [-1]


1 commentaires

vous pouvez également utiliser des expressions régulières (regex), mais celles-ci peuvent être compliquées à implémenter si vous ne comprenez pas ce que vous faites



0
votes

En utilisant uniquement les fonctions intégrées:

# slices input from beginning to first underscore
words = input[:input.find("_")]
# slices input from first underscore to the end, then replaces "_" with "".
numbers = input[input.find("_"):].replace("_", "")


0 commentaires