我有一个包含字母和数字的字符串 -
12345A6789B12345C
如何获得看起来像这样的列表
[12345A,6789B,12345C]
答案 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']