@mixailkornia

Как получить индексы цифр в строке?

Есть строка t2i3h3s3digit4here55.
Нужно получить индекс каждой цифры.
Например для первой цифры это будет - Цифра 2 индекс 1 (от 0).
Например для второй цифры это будет - Цифра 3 индекс 3 (от 0).

Пробую нечто такое, но ничего не выходит:

s1 = "t2i3h3s3digit4here55" 
m = re.search("\d", s1) 
print(m)
#<re.Match object; span=(13, 14), match='4'>
if m:
    print( "Digit found at position " + str(m) + "") 
##Digit found at position <re.Match object; span=(13, 14), match='4'>   
else:
    print( "No digit in that string")
  • Вопрос задан
  • 254 просмотра
Пригласить эксперта
Ответы на вопрос 2
@galaxy
Позиция цифры (т.е. индекс начала найденной выражением строки) можно получить из m.start().
UPD: Для повторного поиска совпадений есть фунцкия re.finditer():
[m.start() for m in re.finditer("\d", s1)]

Более говнокодистый вариант через цикл и search

search ищет только первое совпадение, надо дальше циклом прогонять, примерно так:
idxs = []
l = 0
while m := re.search("\d", s1):
	idxs.append(l + m.start())
	l += m.end()
	s1 = s1[m.end():]



Но вообще-то регулярные выражение для поиска цифр - перебор. Хватит и этого:
[i for i, c in enumerate(s1) if c >= '0' and c <= '9']
Ответ написан
Комментировать
Dr_Elvis
@Dr_Elvis Куратор тега Python
В гугле забанен
s1 = "t2i3h3s3digit4here55" 
a = []
for i, x in enumerate(s1):
	try:
		if isinstance(int(x), int):
			a.append(i)
	except Exception as e:
		pass
print(a)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы