2017-06-14 44 views

回答

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

这工程!谢谢。我需要在我的正则表达式上工作。 – fpolig01

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端。

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