2017-01-30 3 views
-1

Я загрузил исходный код веб-сайта. Загружая исходный код и преобразовывая его в строку, многие из символов (например, одиночные кавычки ('), двойные кавычки («), скобки (<,>) и косые черты (/)) теперь удваиваются .Python - экранированный 4-значный символ unicode unicode

Пример:

s = '\\u2018this \\/ that\\u2019' 

текст представлен на веб-сайте, и как я хочу его представлял, когда распечатывается является:

this/that

Мой первый инстинкт должен был использовать регулярное выражение для поиска все в Стойки из 2-х символов обратных косых черт, и заменить его на один обратный слеше, а затем использовать str.encode('utf-8').decode('utf-8') для преобразования 4 цифры экранированных символов Unicode в их реальные персонаж:

import re 
sample = '\\u2018this \\/ that\\u2019' 
pattern = r'(\\)\\\1' 
double_escapes_removed = re.sub(pattern, '', text) 
final_text = text.encode('utf-8').decode('utf-8') 

print(final_text) должен возвращать this/that, но возвращаемая строка оказывается совершенно неизменными : \u2018this \/ that\u2019.

Я проверил образец индивидуально с re.findall(pattern, text), и он успешно нашел 3 экземпляра двойной обратной косой черты. Кроме того, я понятия не имею, что пойдет не так

ответ

1

Это оказывается немного сложнее. Большая часть проблемы заключается в том, что хотя «\ u2018» имеет 6 символов, «\ u2018» представляет собой представление одного символа, поэтому вы не можете просто заменить «\ u» на «\ u» и заставить его работать.

Это заставляет вас большую часть пути туда без необходимости вручную перебрать побеги с регулярным выражением:

>>> s.encode('ascii').decode('unicode-escape') 
<<< '‘this \\/ that’' 

Python 3 не выводит предупреждение о '\/' быть неправильная последовательность юникода побег, так что вы, вероятно, хотите сначала позаботиться о них.

+0

Благодарим вас за то, что вы сэкономите время –

Смежные вопросы