2016-12-01 118 views
0

我想一個字符串,如下python如何將字符串拆分爲多個字符?

1234ABC分成123ABC

2B2B

10E10E

我發現split功能,因爲不工作沒有delimiter

+2

你打算拆分1234AB C'到'123'和'ABC'?如果是這樣,忽略中間的'4'的標準是什麼?事實上,你所展示的例子的分裂標準是什麼? – smac89

+0

目前尚不清楚您是否想從字符串中解析數字。請編輯你的問題。 – Javier

回答

5

您可以使用itertools.groupby和布爾isdigit函數。

from itertools import groupby 

test1 = '123ABC' 
test2 = '2B' 
test3 = '10E' 

def custom_split(s): 
    return [''.join(gp) for _, gp in groupby(s, lambda char: char.isdigit())] 

for t in [test1, test2, test3]: 
    print(custom_split(t)) 

# ['123', 'ABC'] 
# ['2', 'B'] 
# ['10', 'E'] 
2

這可以很容易地使用re模塊來完成:

>>> import re 
>>> 
>>> re.findall('[a-zA-Z]+|[0-9]+', '1234ABC') 
['1234', 'ABC'] 
>>> re.findall('[a-zA-Z]+|[0-9]+', '2B') 
['2', 'B'] 
>>> re.findall('[a-zA-Z]+|[0-9]+', '10E') 
['10', 'E'] 
>>> # addtionall test case 
... 
>>> re.findall('[a-zA-Z]+|[0-9]+', 'abcd1234efgh5678') 
['abcd', '1234', 'efgh', '5678'] 
>>> 

正則表達式的使用是非常簡單的。這裏是快速穿行:

  • [a-zA-Z]+:匹配一個或多個字母小寫或上
  • |或...
  • [0-9]+:一個或多個完整的數字
2

另一種方式用re包解決它

r = re.search('([0-9]*)([a-zA-Z]*)', test_string) 
r.groups() 
相關問題