切片字符串跳过特定字符

问题描述 投票:0回答:2

我在python3中有这样的字符串:

ab_cdef_ghilm__nop_q__rs

从特定的字符开始,基于索引位置,我想在此字符的每侧5个字符周围切一个窗口。但是,如果找到了_字符,则必须跳过并转到下一个字符。例如,考虑在该字符串中的字符“ i”,我希望在“ i”周围有一个11个字符的最终字符串,每次输出时都将跳过_个字符,例如输出以下内容:

 defghilmnop

考虑到我有很长的字符串,并且我想确定在该位置执行此操作的索引位置。在这种情况下,index = 10是否有一个命令可以裁剪特定大小的字符串而跳过特定字符?

目前,我要做的是从字符串中删除_,同时计算_出现的次数,并使用它来定义中间索引位置的偏移,最后我裁剪出所需大小的窗口,但是我想让事情变得更具说服力,所以如果我每次他发现“ _”太完美了,我都可以跳一下]

python string window python-3.6 skip
2个回答
0
投票
我认为没有特定的命令,但是您可以构建自己的命令。

例如:

s = 'ab_cdef_ghilm__nop_q__rs' def get_slice(s, idx, n=5, ignored_chars='_'): d = {i: ch for i, ch in enumerate(s) if ch not in ignored_chars} if idx in d: keys = [k for k in d.keys()] idx = keys.index(idx) return ''.join(d[k] for k in keys[max(0, idx-n):min(idx+n+1, len(s))]) print(get_slice(s, 10, 5, '_'))

打印:

defghilmnop


如果print(get_slice(s, 1, 5, '_'))

abcdefg


0
投票
您定义了如下所示的函数拆分,它将拆分字符串,以使字符串在左侧和右侧具有给定数量的字符,而不是“ _”

st = "ab_cdef_ghilm__nop_q__rs" def slice(st, ind, c_count): cp = [char!="_" for char in st] for i in range(len(st)): if sum(cp[ind:ind+i]) == c_count: break right = ind + i for i in range(len(st)): if sum(cp[ind-i:ind]) == c_count: break left = ind - i return st[left:right+1] slice(st, 10, 5)

© www.soinside.com 2019 - 2024. All rights reserved.