在字符之间找到多个字符串

时间:2017-04-10 10:05:20

标签: python string list

我有一个包含这样数据的长字符串:

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)

2 个答案:

答案 0 :(得分: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,则可以使用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]

答案 1 :(得分:0)

div{
  margins:0 px;
  overflow:hidden;
}