如何在字母出现的地方拆分字符串?

时间:2017-06-14 23:19:50

标签: python

我有一个包含字母和数字的字符串 -

12345A6789B12345C

如何获得看起来像这样的列表

[12345A,6789B,12345C]

3 个答案:

答案 0 :(得分:4)

>>> my_string = '12345A6789B12345C'
>>> import re
>>> re.findall('\d*\w', my_string)
['12345A', '6789B', '12345C']

答案 1 :(得分:1)

为了完整性,非正则表达式解决方案:

data = "12345A6789B12345C"

result = [""]
for char in data:
    result[-1] += char
    if char.isalpha():
        result.append("")
if not result[-1]:
    result.pop()

print(result)
# ['12345A', '6789B', '12345C']

对于较小的字符串应该更快,但如果你正在处理大量数据,那么在编译和预热后使用正则表达式,搜索分离就会发生在快速的' C方。

答案 2 :(得分:0)

您也可以使用生成器来构建它。下面的方法跟踪每个切片的开始和结束索引,产生一个字符串生成器。您必须将其强制转换为列表以将其用作一个,但(splitonalpha(some_string)[-1]将失败,因为生成器不可转换)

def splitonalpha(s):
    start = 0
    for end, ch in enumerate(s, start=1):
        if ch.isalpha:
            yield s[start:end]
            start = end

list(splitonalpha("12345A6789B12345C"))
# ['12345A', '6789B', '12345C']