在结果前面加前缀字符串。拆分每个结果的子串索引

2024-06-16 11:56:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我有这样一个代码,每次我找到一个B,我都要拆分一个字符串:

string = "AAABAABAAABIAABIAABAA"
s=[x.strip() for x in string.split('B')]
print '\n'.join(s)

输出如下:

'AAA' 'AA' 'AAA' 'IAA' 'IAA' 'AA'

我的问题是,如何在输出之前放置一个范围(字符的第一个位置,字符的最后一个位置),比如:(0,3)AAA (3,5)AA (5,8)AAA (8,11)IAA?你知道吗


Tags: 字符串代码inforstring字符aasplit
2条回答
>>> import re
>>> groups = (((x.start(), x.end()), x.group()) for x in matches)
>>> matches = re.finditer("[^B]+", "AAABAABAAABIAABIAABAA")
>>> groups = (((x.start(), x.end()), x.group()) for x in matches)
>>> ["{}{}".format(*arg) for arg in groups]
['(0, 3)AAA', '(4, 6)AA', '(7, 10)AAA', '(11, 14)IAA', '(15, 18)IAA', '(19, 21)AA']

编辑:

正如塞格法尔指出的,我没有正确地阅读这个问题。。。你知道吗

>>> s = 0
>>> res = []
>>> for x in "AAABAABAAABIAABIAABAA".split('B'):
...     res.append("{}{}".format((s, s+len(x)), x))
...     s += len(x)
... 
>>> print "".join(res)
(0, 3)AAA(3, 5)AA(5, 8)AAA(8, 11)IAA(11, 14)IAA(14, 16)AA

或者

>>> print "\n".join(res)
(0, 3)AAA
(3, 5)AA
(5, 8)AAA
(8, 11)IAA
(11, 14)IAA
(14, 16)AA

使用没有导入的简单for循环:

data = "AAABAABAAABIAABIAABAA"

result, count = [], 0
for s in data.split('B'):
    result.append([(count, count+len(s)), s])
    count += len(s)
print(result)

输出:

[[(0, 3), 'AAA'], [(3, 5), 'AA'], 
 [(5, 8), 'AAA'], [(8, 11), 'IAA'], 
 [(11, 14), 'IAA'], [(14, 16), 'AA']]

或者如果您希望它被\n分隔:

list_of_strings = map(lambda l: '{}{}'.format(*l), result)
print('\n'.join(list_of_strings))

输出:

(0, 3)AAA
(3, 5)AA
(5, 8)AAA
(8, 11)IAA
(11, 14)IAA
(14, 16)AA

顺便说一句:不要使用string作为变量名,因为它可能与string模块冲突。你知道吗

相关问题 更多 >