61 votes

Trouver l'index du premier chiffre d'une chaîne

j'ai une chaîne comme

 "xdtwkeltjwlkejt7wthwk89lk"

comment puis-je obtenir l'index du premier chiffre de la chaîne?

90voto

bgporter Points 11119

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

39voto

Anurag Uniyal Points 31931

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}

21voto

alukach Points 367

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.

10voto

Christian Points 682
import re
first_digit = re.search('\d', 'xdtwkeltjwlkejt7wthwk89lk')
if first_digit:
    print(first_digit.start())

10voto

Paulo Scardine Points 17518

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.com

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.

Powered by:

X