【问题标题】:split-string-every-nth-character with nth+1 separator '0'使用第 n + 1 个分隔符“0”分割字符串每 n 个字符
【发布时间】:2022-01-18 04:40:49
【问题描述】:

我有一系列数字是字符串,例如: 在:'01110100001101001001110100'

我想拆分如下: 输出:['01110100','0','01101001','0','01110100]

我们可以注意到第九个“0”是二进制数字列表的分隔符。

另外说:前八位,分隔符'0',下一个高度,分隔符'0',下一个高度,分隔符'0'等

我知道如何使用第 n 个元素 (Split string every nth character?) 进行拆分,但这里的问题有点复杂:有一个分隔符 '0'

非常感谢您的帮助。

最诚挚的问候

【问题讨论】:

  • 您可以使用re.findall() 轻松完成此操作。使用带有两个捕获组的正则表达式:第一个匹配 8 位数字,第二个匹配 0 分隔符。
  • 您好,感谢您的帮助。你能展示一下如何做到这一点。一个具体的说明会有所帮助,因为它通常是堆栈溢出的约定。提前致谢并致以最诚挚的问候
  • 您可以使用循环获取[:8]并替换IN = IN[8:],然后获取[:1]并替换IN = IN[1:],(循环结束)

标签: python character separator


【解决方案1】:

您可以对捕获组使用正则表达式。

import re

instr = '01110100001101001001110100'
outlist = list(sum(re.findall(r'(\d{8})(\d)', instr), ()))

print(outlist)

re.findall() 返回一个元组列表,list(sum(..., ()) 将其展平为一个列表。

【讨论】:

  • 非常感谢和最诚挚的问候
【解决方案2】:

您只想在获取长度为 8 的切片和获取长度为 1 的切片之间交替,对吧?

def get_slices(string):
    from itertools import islice, cycle

    string_iter = iter(string)
    slice_lens = cycle([8, 1])

    while slc := "".join(islice(string_iter, next(slice_lens))):
        yield slc

print(list(get_slices("abcdefghijklmnopqr")))

输出:

['abcdefgh', 'i', 'jklmnopq', 'r']

【讨论】:

  • 完美运行!非常感谢和最亲切的问候
  • @LaurentSalé 很高兴它起作用了!我用稍微紧凑的版本编辑了我的答案(需要 Python 3.8。)
猜你喜欢
  • 1970-01-01
  • 2019-01-12
  • 2015-12-04
  • 2012-03-17
  • 1970-01-01
  • 1970-01-01
  • 2020-08-13
  • 1970-01-01
相关资源
最近更新 更多