Python字符串双重拆分?
这就是我的问题,我得到了一个像这样的字符串Python字符串双重拆分?,python,list,sorting,numbers,Python,List,Sorting,Numbers,这就是我的问题,我得到了一个像这样的字符串 01000200030004020511050006000702051108020511090205111002051111020511120205111300140205111500160017001800190020002100 然后我必须把它分割成这样的东西 [['01', 00], ['02', 00], ['03', 00], ['04', 020511], ['05', 00], ['06', 00], ['07', 020511, ['
01000200030004020511050006000702051108020511090205111002051111020511120205111300140205111500160017001800190020002100
然后我必须把它分割成这样的东西
[['01', 00], ['02', 00], ['03', 00], ['04', 020511], ['05', 00], ['06', 00], ['07', 020511, ['08', 020511], ['09', 020511], ['10', 020511,], ['11', 020511], ['12', 020511], ['13', 00], ['14', 020511], ['15', 00], ['16', 00], ['17', 00], ['18', 00], ['19', 00], ['20', 00], ['21', 00]]
['01', '02', '03', '0402051105', '06', '0702051108020511090205111', '20511110205111202051113', '1402051115', '16', '17', '18', '19', '2', '021', '']
所以首先我想让我们尝试使用split,也许这会奏效,所以这是我第一次尝试,结果就是这样
[['01', 00], ['02', 00], ['03', 00], ['04', 020511], ['05', 00], ['06', 00], ['07', 020511, ['08', 020511], ['09', 020511], ['10', 020511,], ['11', 020511], ['12', 020511], ['13', 00], ['14', 020511], ['15', 00], ['16', 00], ['17', 00], ['18', 00], ['19', 00], ['20', 00], ['21', 00]]
['01', '02', '03', '0402051105', '06', '0702051108020511090205111', '20511110205111202051113', '1402051115', '16', '17', '18', '19', '2', '021', '']
在那次失败之后,我对自己说,我将不得不拆分两次来去掉'00'和'020511',所以我使用了这种方法
re.split('020511|00', theStr)
用那种方法我把这个拿回来
['01', '02', '03', '04', '05', '06', '07', '08', '09', '1', '2051111', '12', '13', '14', '15', '16', '17', '18', '19', '2', '021', '']
但是它不是我想要的格式,也没有正确的显示出来,当我拆分它时,它只会去掉我所说的值,比如说“10”将显示为1,因为程序拆分了0,我不完全确定如何找到解决方案,所以非常感谢您的帮助。。谢谢。您可以使用
re.findall()
查找长度为2、后跟00
或020511
的数字:
>>> re.findall('(\d{2})(020511|00)', theStr)
[('01', '00'), ('02', '00'), ('03', '00'), ('04', '020511'), ('05', '00'), ('06', '00'), ('07', '020511'), ('08', '020511'), ('09', '020511'), ('10', '020511'), ('11', '020511'), ('12', '020511'), ('13', '00'), ('14', '020511'), ('15', '00'), ('16', '00'), ('17', '00'), ('18', '00'), ('19', '00'), ('20', '00'), ('21', '00')]
>>>
如果您希望在列表中显示结果,可以使用返回迭代器和列表理解的re.finditer
,将相关组转换为列表:
>>> [list(i.group(1,2)) for i in re.finditer('(\d{2})(020511|00)', theStr)]
[['01', '00'], ['02', '00'], ['03', '00'], ['04', '020511'], ['05', '00'], ['06', '00'], ['07', '020511'], ['08', '020511'], ['09', '020511'], ['10', '020511'], ['11', '020511'], ['12', '020511'], ['13', '00'], ['14', '020511'], ['15', '00'], ['16', '00'], ['17', '00'], ['18', '00'], ['19', '00'], ['20', '00'], ['21', '00']]
>>>
所以基本上,分隔符是一个递增的两位数?那是。。。奇怪的如果,比如说,你的
'04'
第二部分本身包含'05'
?,例如[04050611],[05,…]
?这是一个定义的编码吗?不,我不完全确定你刚才的意思,但在每一个01或02之后,或者无论什么,它只会上升到21,在那之后将是00或020511,我必须将它们组合在一起,比如说你会有01,让我们假设有两个00,然后我会像这样把它们分组['01',00]]我有一个印象,你在处理BCD编码的数字。如果这是真的,请先使用binascii.unhexlify。字符串已解码。它现在只是一个字符串中的数字,这会把它放入列表中吗?或者?@BSD_u这将返回一个列表
的元组
s。非常感谢大家。