J'essaie de diviser une chaîne sur n'importe quel caractère qui n'est pas un chiffre.
orig = '0 1,2.3-4:5;6d7' results = orig.split(r'\D+')
Je m'attends à obtenir une liste d'entiers dans les résultats
p >
0, 1, 2, 3, 4, 5, 6, 7
mais à la place j'obtiens une liste avec un seul élément de chaîne qui correspond à la chaîne d'origine.
3 Réponses :
Eh bien ... vous utilisez str.split ( )
- qui prend des caractères à diviser à - pas regex. Votre code serait divisé sur n'importe quelle chaîne '\ D +'
- à l'intérieur de votre texte:
['0', '1', '2', '3', '4', '5', '6', '7']
Vous pouvez utiliser re.split () à la place:
import re orig = '0 1,2.3-4:5;6d7' results = re.split(r'\D+',orig) print(results)
pour obtenir p>
orig = 'Some\\D+text\\D+tosplit' results = orig.split(r'\D+') # ['Some', 'text', 'tosplit']
Utilisez data = list (map (int, results))
pour convertir en int.
Si vous souhaitez obtenir des sections non numériques et numériques, vous pouvez ajouter un groupe à l'expression régulière: re.split (r '(\ D +)', orig)
Essayez ceci:
orig = '0 1,2.3-4:5;6d7' [i for i in orig if i.isdigit()]
belle - bien que si vous avez des nombres avec plus d'un chiffre ( '12 142, 92 '
) vous obtiendrez [1,2,1,4,2,9,2] < / code> au lieu de
[12,142,92]
@PatrickArtner Oui, j'ai remarqué ça. mais peut-être que cela fonctionne pour OP
for i in '0 1,2.3-4:5;6d7': try: print(int(i),end=' ') except: continue 0 1 2 3 4 5 6 7
Ce n'est pas «scinder» une liste. Vous imprimez simplement les chiffres.
créer une liste, l = [], puis dans le bloc try / catch '' l.append (int (i)) '' à la place print (int (i)).
Copie possible de la chaîne fractionnée Python basée sur l'expression régulière