2016-08-01 2 views
0

Я хотел бы разбить строку u'123K на 123 и K. Я пробовал re.match("u'123K", "\d+") в соответствии с номером и re.match("u'123K", "K"), чтобы соответствовать букве, но они не работают. Что такое питонический способ сделать это?Разделить строку юникода на компоненты, содержащие числа и буквы

+0

Если в строке всегда будет некоторое количество чисел, за которыми следует одна буква, вы можете использовать 'nums, letter = string [: - 1], string [-1]' – IanAuld

+1

для 're.match', шаблон должен идти сначала, затем строку, которую вы оцениваете. у вас есть это назад – xgord

ответ

2

Используйте re.findall(), чтобы найти все цифры и символы:

>>> s = u'123K' 
>>> re.findall(r'\d+|[a-zA-Z]+', s) # or use r'\d+|\D+' as mentioned in comment in order to match all numbers and non-numbers. 
['123', 'K'] 

Если вы только дело с этой строкой, или если вы только хотите, чтобы разбить строку с последнего символа вы можете просто использовать индексацию:

num, charracter = s[:-1], s[-1:] 
+0

Короткие и сладкие! – tnabdb

+2

'r '\ d + | \ D +'' короче. Однако спецификации не совсем понятны. –

+0

@ WiktorStribiżew Да, это хороший вариант! – Kasramvd

0

Вы можете также использовать itertools.groupby метод, группировка цифр:

>>> import itertools as it 
>>> for _,v in it.groupby(s, key=str.isdigit): 
     print(''.join(v)) 


123 
K 
Смежные вопросы