Как посчитать длину строки без управляющих символов

Как вернуть длину строки не считая управляющие символы? Например строка будет 'Denis\nShamra\v\t\r' len строки должeн равняться 11. Подскажите можно ли тут использовать метод строки какой-то или только можно использовать регулярные выражения?


Ответы (3 шт):

Автор решения: gil9red

Можно использовать регулярное выражение по которому все whitespace будут удалены

\s- это тоже самое, что [ \f\n\r\t\v]. Т.е. еще и пробелы будут удалены

Пример:

import re

text = 'Denis\nShamra\v\t\r'
new_text = re.sub(r'\s', '', text)
print(len(new_text))
# 11
→ Ссылка
Автор решения: Павел

Можно воспользоваться тем, что все управляющие символы находятся в начале таблицы Unicode, поэтому их числовое представление через ord не превышает 31:

a = 'Denis\nShamra\v\t\r'

print(len(''.join(x for x in a if ord(x) >= 32)))

Вывод:

11

→ Ссылка
Автор решения: Namerek
from unicodedata import category

a = 'Denis\nShamra\v\t\r'
print(len(a))
print(len(''.join(filter(lambda x: category(x) != 'Cc', a))))
# 15
# 11
→ Ссылка