【发布时间】:2018-05-20 12:15:15
【问题描述】:
我有一个 python 字符串:
my_string = 'thisisjustadummystringfortestingpurposes'
我想用红色打印字符串的某些区域,所以我使用 ANSI 转义码:
- 红色:'\x1b[31m'
- 黑色:'\x1b[0m'
然后我要做的是,创建一个插入了 ANSI 代码的新字符串。
例子:
my_color_seq = seq[:5] # 0:5 will be black
my_color_seq += '\x1b[31m' # start red
my_color_seq += seq[5:10] # 5:10 will be red
my_color_seq += '\x1b[0m' # start black
my_color_seq += seq[10:] # 10: will be black
print(my_color_seq)
此代码有效并正确打印区域 5:10 红色。 我什至创建了一个循环,我可以在其中使用索引和长度列表来为我想用红色着色的区域。
现在的问题是我的彩色字符串中包含不可见的字符(ANSI 代码),所以字符的索引不再是它看起来的样子。
想象一下,我现在想通过将其他一些片段涂成蓝色来再次处理彩色字符串。我不再信任索引,因为我的字符串现在比看起来要大。
当然,我可以更新索引以指向新字符串中的正确位置,但我只是想知道是否有更简单的方法来做到这一点。
【问题讨论】:
-
Python 不理解 ANSI 控制字符,所以它当然会计算它们。我将创建一个字符串包装器并为长度保留一个字符索引值表 - 这样,每当您添加一个 ANSI 控制结构时,您将其长度添加到字符位置的表中,然后检索“修改”是微不足道的通过简单的
sum(index_table[:index])索引。