2017-04-10 74 views
3

我有很長的字符串,這樣的數據:查找字符之間的多串

category: 33 ; id: AF45DA; category: 54 ; id: KF65YA; category: 60 ; id: XC36IA; 

而且我想從它創建列表看起來像這樣:

new_list = [33,54,60] 

基本上,我只需要字符串中的category:;之間的值保持原始順序。

我可以創建一些看起來有效的東西我假設在無法正常工作時會出現異常。我是Python新手,並不知道可能性,因此如果有人能告訴我應該如何正確完成,我會非常感激。

這是實際的版本:

s = "category: 33 ; id: AF45DA; category: 54 ; id: KF65YA; category: 60 ; id: XC36IA;" 
c = s.count("category") 
z = 0 
number_list = [] 
for x in range(z,c): 
    val = s.split('category:')[x+1] 
    number = val.split(' ;')[0] 
    print (number) 
    number_list.append(number.strip()) 

print ("All Values:", number_list) 

回答

3

簡單地構造一個正則表達式:

import re 

rgx = re.compile(r'category:\s*(\d+)\s*;') 
number_list = rgx.findall('category: 33 ; id: AF45DA; category: 54 ; id: KF65YA; category: 60 ; id: XC36IA;')

這給:

>>> rgx.findall('category: 33 ; id: AF45DA; category: 54 ; id: KF65YA; category: 60 ; id: XC36IA;') 
['33', '54', '60'] 

如果你想要得到的結果是int S,你可以使用map

import re 

rgx = re.compile(r'category:\s*(\d+)\s*;') 
number_list = list(map(int,rgx.findall('category: 33 ; id: AF45DA; category: 54 ; id: KF65YA; category: 60 ; id: XC36IA;')))

這產生:

>>> number_list 
[33, 54, 60] 
0
s = "category: 33 ; id: AF45DA; category: 54 ; id: KF65YA; category: 60 ; id: XC36IA;" 
s = s.split(";") 
number_list = [] 
for ss in s: 
    if "category" in ss: 
     number_list.append(int(ss[10:-1])) 
相關問題