如何在不计算文本格式的情况下获得字符串的长度



例如,我正在使用一个名为colored的库,它可以为控制台格式化字符串。我试图获得该字符串的长度,但len()计算格式字母也不显示在控制台中…例如,如果我要设置字符串"test"如果要设置为绿色,它看起来像这样:"x1b[38;5;2mtest",当我打印它的时候,它只是用绿色打印test所以我只想让字母count显示4。无论您使用什么库,格式看起来都是一样的。是否有任何方法可以获得字符串的长度并忽略它的格式?

是的,有。我不久前编写了一个函数来做这件事。

import re
def len_no_ansi(string):
return len(re.sub(
r'[u001Bu009B][[]()#;?]*((([a-zA-Zd]*(;[-a-zA-Zd/#&.:=?%@~_]*)*)?u0007)|((d{1,4}(?:;d{0,4})*)?[dA-PR-TZcf-ntqry=><~]))', '', string))

<子>学分:https://github.com/chalk/ansi-regex/blob/0755e661553387cfebcb62378181e9f55b2567ff/index.js

import re
s = "x1b[38;5;2mtest"
lenth = len(re.sub("\x1b[d*;d*;d*m", "", s))

以下是正则表达式的解释:https://regexr.com/630m7

相关内容

最新更新