Как подсчитать длину строки в Python (если строка содержит экранирование символов)?

Есть строка x = '1a\u0398\t\u03B43s'

Как подсчитать его длину только с помощью кода? Я имею в виду, что добавлять перед строкой r вручную бесполезно.

(x = r'1a\u0398\t\u03B43s').

Попробовали это решение, но все равно ничего хорошего (оно считает 9 символов, а должно быть 18):

x = '1a\\u0398\\t\\u03B43s'
decoded_s = x.encode().decode('unicode_escape')
print(f'Symbols: {len(decoded_s)}'))

возвращается 9

Какой должна быть длина '1aΘ\tδ3s'?

matszwecja 01.08.2024 14:12
s = x.encode('unicode_escape') дает Лен(ам) как 18
user19077881 01.08.2024 14:19
'1a\u0398\t\u03B43s' и '1aΘ\tδ3s' одинаковы. Первое означает второе. Ваша строка не содержит «обратную косую черту u ноль…», она содержит символ Θ. В каком конкретно случае вы не можете написать r'1a\u0398\t\u03B43s', но это должно означать '1a\\u0398\\t\\u03B43s'?!
deceze 01.08.2024 14:34
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
3
50
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Поскольку вы не можете преобразовать его в необработанную строку, вы можете принудительно преобразовать представление байтов в строку следующим образом:

Вы хотите посчитать, что находится между одинарными кавычками:

>>> x.encode("unicode_escape")
b'1a\\u0398\\t\\u03b43s'

Преобразование в Python - это не то, что вам нужно:

>>> x.encode("unicode_escape").decode("unicode_escape")
'1aΘ\tδ3s'

вы можете принудительно преобразовать его в строку (в отличие от преобразования объекта в строку, описанного выше):

>>> str(x.encode("unicode_escape"))
"b'1a\\\\u0398\\\\t\\\\u03b43s'"

Отправьте вложение b'...':

>>> str(x.encode("unicode_escape"))[2:-1]
'1a\\\\u0398\\\\t\\\\u03b43s'
>>> len(str(x.encode("unicode_escape"))[2:-1])
21

Теперь с \ все немного сложнее - ваш необработанный запрос имеет 2 \\, но, поскольку это не необработанная строка, он экранирует их все, поэтому, даже если вы видите 4 \\\\, он считается 3 \\\ с простым len(...) - поэтому вы хотите вычесть По 1 за каждое появление (правильно будет считаться 4 \\\\).

>>> y = str(x.encode("unicode_escape"))[2:-1]
>>> len(y) - y.count("\\\\")
18

Как это связано с ожидаемым результатом 18?

matszwecja 01.08.2024 14:14

хорошая мысль, я пропустил unicode_escape

Georgina Skibinski 01.08.2024 14:17

Другие вопросы по теме

Похожие вопросы

Как мне найти максимальное значение динамического окна и минимальное значение ниже него?
Как изменить цвет определенного слова пользователя в «input()»
C-расширение Python с numpy случайно аварийно завершает работу после нескольких вызовов (5–10) из кода Python
Создайте фабрику виджетов в Qt
Почему GEKKO не предоставляет оптимальные команды, хотя выходные данные не соответствуют эталонным?
Java sshtools сгенерировал подпись EDDSA, не совпадающую с сгенерированной подписью пикриптома Python
Как записать атрибуты каждого экземпляра в переменную класса, при этом родительский класс записывает экземпляры всех классов в одну и ту же переменную?
Создание динамического массива numpy с использованием двух существующих массивов
Функция C++ возвращает результат очень медленно, намного медленнее, чем функционально эквивалентный код Python
Добавление переменного отступа перед каждой строкой вывода журнала Python