Разделить поступающую строку на буквы и цифры
Есть строка 'k3e10g88f13' Нужно разделить её на буквы и цифры по отдельности. Единственное к чему я пришел это
x = 'k3e10g88f13'
word =[]
number = []
for i in x:
if i.isalpha():
word.append(i)
else:
number.append(i)
print(word, number,sep="\n")
Но тут у меня получается все цифры по отдельности формата 3, 1, 0, 8, 8, 1, 3, а мне нужно чтобы 3, 10, 88, 13. Есть ли способы как то это проделать? Если есть, то какие? Буду благодарен.
Ответы (3 шт):
Воспользуйтесь регулярными выражениями.
[a-zA-Z]+ — одно и более повторений латинской буквы
\d+ — одно и более повторений цифры
Пример:
import re
x = 'k3e10g88f13'
chars = re.findall(r'[a-zA-Z]+', x) # ['k', 'e', 'g', 'f']
nums = re.findall(r'\d+', x) # ['3', '10', '88', '13']
Да, лучше использовать регулярные выражения, но можно и ваш код "починить", добавив в него проверку, был ли предыдущий элемент такого же типа и в этом случае можно присоединять новый элемент к предыдущему. Ну и нужно не забыть обработать случай, когда предыдущего элемента ещё нет.
x = 'k3e10g88f13'
word =[]
number = []
for i in x:
if i.isalpha():
if not word or not last_isalpha:
word.append(i)
else:
word[-1] += i
else:
if not number or last_isalpha:
number.append(i)
else:
number[-1] += i
last_isalpha = i.isalpha()
print(word, number,sep="\n")
Вывод:
['k', 'e', 'g', 'f']
['3', '10', '88', '13']
x = 'k3e10g88f13'
word = "".join(" " if el.isdigit() else el for el in x).split()
number = "".join(el if el.isdigit() else " " for el in x).split()
print(word)
print(number)