Регулярные выражения Python для реализации строкового невыхода

Если вам не нужно поддерживать очень старые браузеры, это способ сделать это, даже если ваш внешний скрипт загружен атрибутом 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");
});
13
задан piRSquared 30 December 2016 в 12:57
поделиться

5 ответов

Не это, что делает второй пример 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 
>>> 
8
ответ дан 2 December 2019 в 00:59
поделиться

Ну, я думаю, что Вы, возможно, пропустили 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 Отражения о Доверии Доверию" , где наш герой использует подобный пример для объяснения опасностей доверчивых компиляторов, которые Вы не загрузили от машинного кода сами.

3
ответ дан 2 December 2019 в 00:59
поделиться

Идея состоит в том, что я буду читать в завершенной строке и не выходить из нее (функция, особенно недостающая из 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
1
ответ дан 2 December 2019 в 00:59
поделиться

Вы обманываетесь представлением 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
0
ответ дан 2 December 2019 в 00:59
поделиться

Mark; его второй пример требует каждого завершенного символа, брошенного в массив первоначально, который генерирует KeyError, если escape-последовательность, оказывается, не находится в массиве. Это умрет на чем-либо кроме этих трех обеспеченных символов (дайте \v попытку), и перечисление каждой возможной escape-последовательности, каждый раз, когда Вы хотите не выйти из строки (или хранение глобального массива) является действительно плохим решением. Аналогичный PHP, это использует preg_replace_callback() с лямбдой вместо preg_replace(), который является совершенно ненужным в этой ситуации.

я сожалею, если я отрываюсь как dick об этом, я просто крайне расстроен Python. Это поддерживается любым механизмом регулярного выражения, который я когда-либо использовал, и я не могу понять, почему это не работало бы.

Спасибо за ответ; эти string.decode('string-escape') функция точно, что я искал первоначально. Если у кого-то есть общее решение regex проблемы обратной ссылки, не стесняйтесь отправлять ее, и я признаю что как ответ также.

0
ответ дан 2 December 2019 в 00:59
поделиться
Другие вопросы по тегам:

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