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

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)
2个回答

3

只需构建一个正则表达式:

<b>import re</b>

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

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

如果您想要的结果是整数类型,您可以使用一个映射(map):
import re

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

这将产生以下结果:
>>> 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]))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接