2016-08-01 2 views
0

Ich möchte die Zeichenfolge u'123K in 123 und K teilen. Ich habe re.match("u'123K", "\d+") ausprobiert, um die Zahl und re.match("u'123K", "K") zusammenzubringen, um den Buchstaben zusammenzubringen, aber sie arbeiten nicht. Was ist eine pythonische Art, dies zu tun?Teilen Sie eine Unicode-Zeichenfolge in Komponenten, die Zahlen und Buchstaben enthalten

+0

Wenn die Zeichenfolge immer eine Anzahl von Zahlen gefolgt von einem Buchstaben ist, können Sie 'nums, letter = string [: - 1], string [-1]' – IanAuld

+1

für 're.match' verwenden, das Muster soll gehen zuerst, dann die Zeichenfolge, die Sie bewerten. du hast es rückwärts – xgord

Antwort

2

Verwenden re.findall() alle Zahlen und Zeichen zu finden:

>>> 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'] 

Wenn Sie nur mit dieser Zeichenfolge handelt oder wenn Sie nur die Zeichenfolge aus dem letzten Zeichen teilen möchten verwenden Sie können einfach eine Indizierung:

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

Kurz und süß! – tnabdb

+2

'r '\ d + | \ D +'' ist kürzer. Spezifikationen sind jedoch nicht ganz klar. –

+0

@ WiktorStribiżew Ja, es ist eine gute Wahl! – Kasramvd

0

Sie können auch itertools.groupby Methode verwenden Gruppierung Ziffern:

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


123 
K 
Verwandte Themen