2016-08-30 101 views
1
Input : "A32B45C3" 
Output : letters = [ "A", "B", "C"] 
    numbers = ["32","45","3"] 

我尝试使用如何将字符串分别分成两个数字和字母列表?

code = "A32B45C3" 
letters = [] 
numbers = [] 
for i in code: 
    if i.isalpha() == True: 
     letters.append(i) 
    elif i.isdigit() == True: 
     numbers.append(i) 

print letters 
print numbers 

,但我得到数= [ “3”, “2”, “4”, “5”, “3”]代替[ “32”,“45 “,”3“]

+0

你只需要输入字符串字母数字符号? –

+0

不,只是字母和数字@WiktorStribiżew –

+0

这里有一些很好的答案。 –

回答

0

您当前的方法存在的问题是,您正在按字符处理字符串并收集个人字母和数字。

相反,你可以使用re.findall()找到下面大写字母一个或多个数字,然后选择“解压”的成果转化为字母和数字分别:

>>> import re 
>>> 
>>> s = "A32B45C3" 
>>> letters, numbers = zip(*re.findall(r"([A-Z])([0-9]+)", s)) 
>>> letters 
('A', 'B', 'C') 
>>> numbers 
('32', '45', '3') 
0

试试这个,

import re 
input = "A32B45C3" 
letters = filter(None,re.split('[0-9]',input)) 
numbers = filter(None,re.split('[A-Z]',input)) 
1

为你创建一个小代码,Incase你不想使用正则表达式。

您可以进一步优化它:

a = "A32B45C3" 

numbers = [] 
strings = [] 
same_as_prev = True 
tmp = '' 
for i in a: 
    if tmp: 
     same_as_prev = tmp.isalpha() == i.isalpha() 
    if same_as_prev: 
     tmp += i 
    else: 
     if tmp.isalpha(): 
      strings.append(tmp) 
     else: 
      numbers.append(tmp) 
     tmp = i 
     same_as_prev = True 

# Insert unused tmp. 
if tmp: 
    if tmp.isalpha(): 
      strings.append(tmp) 
    else: 
     numbers.append(tmp)  

print numbers 
print strings 
相关问题