2013-05-01 10 views
1

我在解析出包含字母和數字的字符串並獲取列表時遇到了問題。例如:Python - 用字母和數字解析字符串不被阻塞在一起

>>> s = '105Bii2016' 
>>> foo(s) 
['105', 'Bii', '2016'] 

現在我只能這樣做,如果數字是一起:

def foo(s): 
    num, letter = '', '' 
    for i in s: 
     if i.isdigit(): 
      num += i 
     else: 
      letter += i 
    return [letter, num] 

而當我把這個:

>>> s = '1234gdfh1234' 

>>> foo(s) 

['gdfh', '12341234'] 
+0

什麼是你想要的結果? – 2013-05-01 02:17:49

+0

'print re.split(「[a-zA-Z]」,s)' – 2013-05-01 02:18:31

+1

@JoranBeasley - 我想你需要一些捕捉括號。也許更容易的是're.split(r'(\ d +)',s)'。當然,這兩種都假定字符串以字符或數字開頭,如果猜錯了,您會在列表的開頭(或結尾)得到空字符串,這意味着您可能需要過濾它。 – mgilson 2013-05-01 02:22:34

回答

5

如何itertools.groupby

>>> s = '1234gdfh1234' 
>>> from itertools import groupby 
>>> print [''.join(v) for k,v in groupby(s,str.isdigit)] 
['1234', 'gdfh', '1234'] 

另一種解決方案使用正則表達式:

>>> print [x for x in re.split(r'(\d+)',s) if x] 
['1234', 'gdfh', '1234'] 
+0

這正是我所需要的,謝謝! – user2338068 2013-05-01 02:46:02

1
>>> from re import split 
>>> s = '1234gdfh1234' 
>>> [i for i in split(r'(\d+)',s) if i] 
['1234', 'gdfh', '1234'] 
+1

擊敗雅它;-)。偉大的思想家必須同樣思考。 – mgilson 2013-05-01 02:27:29

+0

謝謝,我很感激! – user2338068 2013-05-01 02:55:54