j'ai une chaîne comme
"xdtwkeltjwlkejt7wthwk89lk"
comment puis-je obtenir l'index du premier chiffre de la chaîne?
j'ai une chaîne comme
"xdtwkeltjwlkejt7wthwk89lk"
comment puis-je obtenir l'index du premier chiffre de la chaîne?
Utiliser re.search()
:
>>> import re
>>> s1 = "thishasadigit4here"
>>> m = re.search(r"\d", s1)
>>> if m:
... print("Digit found at position", m.start())
... else:
... print("No digit in that string")
...
Digit found at position 13
Voici un moyen meilleur et plus flexible, regex est exagéré ici.
s = 'xdtwkeltjwlkejt7wthwk89lk'
for i, c in enumerate(s):
if c.isdigit():
print(i)
break
sortir:
15
Pour obtenir tous les chiffres et leurs positions, une simple expression fera l'affaire
>>> [(i, c) for i, c in enumerate('xdtwkeltjwlkejt7wthwk89lk') if c.isdigit()]
[(15, '7'), (21, '8'), (22, '9')]
Ou vous pouvez créer un dict de chiffre et sa dernière position
>>> {c: i for i, c in enumerate('xdtwkeltjwlkejt7wthwk89lk') if c.isdigit()}
{'9': 22, '8': 21, '7': 15}
J'ai pensé que je jetterais ma méthode sur le tas. Je ferai à peu près n'importe quoi pour éviter les regex.
sequence = 'xdtwkeltjwlkejt7wthwk89lk'
i = [x.isdigit() for x in sequence].index(True)
Pour expliquer ce qui se passe ici :
[x.isdigit() for x in sequence]
va traduire la chaîne en un tableau de booléens représentant si chaque caractère est un chiffre ou non[...].index(True)
renvoie la première valeur d'index dans laquelle True
se trouve.Cela semble être un bon travail pour un analyseur :
>>> from simpleparse.parser import Parser
>>> s = 'xdtwkeltjwlkejt7wthwk89lk'
>>> grammar = """
... integer := [0-9]+
... <alpha> := -integer+
... all := (integer/alpha)+
... """
>>> parser = Parser(grammar, 'all')
>>> parser.parse(s)
(1, [('integer', 15, 16, None), ('integer', 21, 23, None)], 25)
>>> [ int(s[x[1]:x[2]]) for x in parser.parse(s)[1] ]
[7, 89]
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.