Если вам не нужно поддерживать очень старые браузеры, это способ сделать это, даже если ваш внешний скрипт загружен атрибутом async :
HTMLDocument.prototype.ready = new Promise(function(resolve) {
if(document.readyState != "loading")
resolve();
else
document.addEventListener("DOMContentLoaded", function() {
resolve();
});
});
document.ready.then(function() {
console.log("document.ready");
});
Не это, что делает второй пример Anders?
В 2,5 существует также string-escape
кодирование, можно подать заявку:
>>> mystring = r"This is \n a test \r"
>>> mystring.decode('string-escape')
'This is \n a test \r'
>>> print mystring.decode('string-escape')
This is
a test
>>>
Ну, я думаю, что Вы, возможно, пропустили r или просчитали обратные косые черты...
"\\n" == r"\n"
>>> import re
>>> mystring = r"This is \\n a test \\r"
>>> p = re.compile( r"[\\][\\](.)" )
>>> print p.sub( r"\\\1", mystring )
This is \n a test \r
>>>
, Который, если я понял, то, что требовали.
я подозреваю, что более общий запрос - это:
>>> d = {'n':'\n', 'r':'\r', 'f':'\f'}
>>> p = re.compile(r"[\\]([nrfv])")
>>> print p.sub(lambda mo: d[mo.group(1)], mystring)
This is \
a test \
>>>
заинтересованный студент должен также считать Ken Thompson Отражения о Доверии Доверию" , где наш герой использует подобный пример для объяснения опасностей доверчивых компиляторов, которые Вы не загрузили от машинного кода сами.
Идея состоит в том, что я буду читать в завершенной строке и не выходить из нее (функция, особенно недостающая из Python, для которого Вы не должны должны быть обращаться к регулярным выражениям во-первых). К сожалению, я не обманываюсь обратными косыми чертами...
Другой иллюстративный пример:
>>> mystring = r"This is \n ridiculous"
>>> print mystring
This is \n ridiculous
>>> p = re.compile( r"\\(\S)" )
>>> print p.sub( 'bloody', mystring )
This is bloody ridiculous
>>> print p.sub( r'\1', mystring )
This is n ridiculous
>>> print p.sub( r'\\1', mystring )
This is \1 ridiculous
>>> print p.sub( r'\\\1', mystring )
This is \n ridiculous
то, Что я хотел бы, чтобы это распечатало,
This is
ridiculous
Вы обманываетесь представлением Python строки результата. Выражение Python:
'This is \\n a test \\r'
представляет строку
This is \n a test \r
, который является, я думаю, что Вы хотели. Попытайтесь добавить, что 'печать' перед каждым из Ваших p.sub () звонит для печати фактической строки, возвращенной вместо представления Python строки.
>>> mystring = r"This is \n a test \r"
>>> mystring
'This is \\n a test \\r'
>>> print mystring
This is \n a test \r
Mark; его второй пример требует каждого завершенного символа, брошенного в массив первоначально, который генерирует KeyError, если escape-последовательность, оказывается, не находится в массиве. Это умрет на чем-либо кроме этих трех обеспеченных символов (дайте \v попытку), и перечисление каждой возможной escape-последовательности, каждый раз, когда Вы хотите не выйти из строки (или хранение глобального массива) является действительно плохим решением. Аналогичный PHP, это использует preg_replace_callback()
с лямбдой вместо preg_replace()
, который является совершенно ненужным в этой ситуации.
я сожалею, если я отрываюсь как dick об этом, я просто крайне расстроен Python. Это поддерживается любым механизмом регулярного выражения, который я когда-либо использовал, и я не могу понять, почему это не работало бы.
Спасибо за ответ; эти string.decode('string-escape')
функция точно, что я искал первоначально. Если у кого-то есть общее решение regex проблемы обратной ссылки, не стесняйтесь отправлять ее, и я признаю что как ответ также.