Функция форматирования удаляет переменные php

#python #python-3.x #formatting

Вопрос:

Я пытаюсь передать параметры внутри строки, но по какой-то причине format функция удаляет переменную часть ( $data и $test )

 import os
import textwrap
def reformat(template):
    #return template
    return textwrap.dedent(template).lstrip()    
initial = "$data['completitions']   = [$test];"
scopes = 'meta.embedded.block.php, source.php'
tabTrig = 'doc'
template = reformat(
    """
    <snippet>
    t<content><![CDATA[
    t{0}
    t]]></content>
    t<tabTrigger>{2}</tabTrigger>
    t<scope>{1}</scope>
    </snippet>
    """.format(initial, scopes, tabTrig))
v.run_command("insert_snippet", {"contents": template})
 

ВЫХОДНОЙ ТОК

 <snippet>
    <content><![CDATA[
    ['completitions']   = []; // NOTICE HERE
    ]]></content>
    <tabTrigger>doc</tabTrigger>
    <scope>meta.embedded.block.php, source.php</scope>
</snippet>
 

ОЖИДАЕМЫЙ РЕЗУЛЬТАТ

 <snippet>
    <content><![CDATA[
    $data['completitions']   = [$test]; // NOTICE HERE
    ]]></content>
    <tabTrigger>doc</tabTrigger>
    <scope>meta.embedded.block.php, source.php</scope>
</snippet>
 

Ответ №1:

Похоже, что он может рассматривать $data и $test как переменные и разрешать их как пустую строку. Можете ли вы попробовать убежать от каждого $ с помощью «может $ быть» или $$ ?

Комментарии:

1. работает, но как мне добавить это в строку, нужно добавить это раньше addslash().format

2. Извините, вам придется добавить к этому больше контекста. Если вы напечатаете template , вы увидите это $data и $test будете напечатаны правильно. Я не знаю, что v.run_command делает и где addslash().format находится.

3. Мне нужно добавить на эту сторону """.format(ESCAPE_FUNCTION(initial), scopes, tabTrig)) функцию только для экранирования $ . v. run_command никак не влияет на то, что она находится в sublime text.

4. от чего-то подобного initial = initial.replace('$', '$') , помещенного после строки.