2017-04-10 72 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])) 
相关问题