String 如何将字符串分别分成两个数字和字母列表?

String 如何将字符串分别分成两个数字和字母列表?,string,list,python-2.7,String,List,Python 2.7,我试着用 Input : "A32B45C3" Output : letters = [ "A", "B", "C"] numbers = ["32","45","3"] 但是我得到的是数字=[“3”、“2”、“4”、“5”、“3”]而不是[“32”、“45”、“3”]当前方法的问题是,您正在逐个字符处理字符串,并收集单个字母和数字 相反,您可以使用查找大写字母后的一个或多个数字,然后将结果分别“解压”为字母和数字: code = "A32B45C3" letters = []

我试着用

 Input : "A32B45C3"
 Output : letters = [ "A", "B", "C"]
     numbers = ["32","45","3"]

但是我得到的是数字=[“3”、“2”、“4”、“5”、“3”]而不是[“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
试试这个

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

为您创建了一个小代码,以防您不想使用正则表达式

您可以进一步优化它:

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

输入字符串中只有字母数字符号吗?没有,只有字母和数字@WiktorStribiżewt这里已经有一些很好的答案了。特别是@alecxe的答案。我还在努力有效地使用正则表达式呢,是的,这个很好。如果您想让它更详细:
numbers=re.findall(r“\d+”,input)
letters=re.findall(r'[a-zA-Z]+',input)
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