Python子字符串 - 将某个字符串左侧的第n个字符分割出来

3

我有以下示例字符串:

0015CB,0,0,01,006D,0016CF1,4,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,00F4E7D,1,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,0008184,8,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,00FA704,9,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,0014EC8,2,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,00FAEEA,9,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,00FADE9,5,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,00FA5A5,3,000D

请问如何获取每个 "000D" 迭代的左侧 9 个字符?第一个结果应该是:
0016CF1,4

第二个提取过程将是:

00F4E7D,1

第三点将是:
0008184,8

等等,我明白你的意思了。

我尝试使用split函数,但是对正则表达式感到困惑。

2个回答

4
无需使用正则表达式,您可以结合使用 split 和 slice:
s = "0015CB,0,0,01,006D,0016CF1,4,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,00F4E7D,1,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,0008184,8,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,00FA704,9,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,0014EC8,2,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,00FAEEA,9,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,00FADE9,5,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,00FA5A5,3,000D"

my_list = [e[-9:] for e in s.split(",000D")]
print(my_list)

输出:

['0016CF1,4', '00F4E7D,1', '0008184,8', '00FA704,9', '0014EC8,2', '00FAEEA,9', '00FADE9,5', '00FA5A5,3', '']

1
非常感谢,我花了好几个小时来寻找解决方案,真的非常感激。 - MB4ig

-1

对于你来说,这个应该非常接近你所需要的...

string = "0015CB,0,0,01,006D,0016CF1,4,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,00F4E7D,1,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,0008184,8,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,00FA704,9,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,0014EC8,2,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,00FAEEA,9,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,00FADE9,5,000D,01,0202,01,0E09,01,02,00,006D,0000,0,0,01,006D,00FA5A5,3,000D"
sub = []
search = "000D"
while string.find(search) != -1:
   pos = string.find(search)
   sub.append(string[pos-10:pos])
   string = string[pos+len(search):]
print(sub)

输出:

['0016CF1,4,', '00F4E7D,1,', '0008184,8,', '00FA704,9,', '0014EC8,2,', '00FAEEA,9,', '00FADE9,5,', '00FA5A5,3,']

只需搜索、子字符串和削减字符串即可。

编辑:我已经修复了评论中指出的错误。


这是一个无限循环。即使它能工作,效率也会非常低下。请参阅Shlemiel画家算法 - Selcuk

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