Специальный фрагмент для Sublime Text

В последние несколько дней мне пришлось использовать stackru, в котором я нашел замечательных и полезных разработчиков. Спасибо всем!!

Я работаю над большим проектом, и мне нужно немного помочь. Я работаю с Moodle XML-файла на Sublime Text 3.

Это небольшая часть кода, который у меня есть:

<questiontext format="html">
  <text>Here is my sample text</text>
</questiontext>

Мне нужно преобразовать это в это:

<questiontext format="html">
  <text><![CDATA[<audio preload="auto"><source src="https://www.mywebsite.com/sample.mp3"></audio>Here is my sample text?]]></text>
</questiontext>

Дело в том, что у меня около 400 строк, которые мне нужно изменить таким образом. И текст "Вот мой образец текста" везде разный. Как я могу сделать такое преобразование? Создать фрагмент? Если честно, я посмотрел, как создать фрагмент, но не могу понять, как создать такой, как этот... Все предложения приветствуются

1 ответ

Решение

Фрагмент используется для ввода часто используемого текста (т.е. фрагмента текста), чтобы сэкономить ваше время при вводе нового текста. Если у вас уже есть текст, который нужно изменить, фрагмент не является ответом.

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

Для вашего примера выше процесс будет выглядеть примерно так:

Откройте панель замены, выбрав Find > Replace... из меню или с помощью соответствующей клавиши для вашей операционной системы (она отображается в меню, если вы ее не знаете).

На появившейся внизу панели убедитесь, что "регулярные выражения" и "Соответствия выделенным цветом" включены, а "Сохранить регистр" выключен. Смотрите подсказки на кнопках.

Далее в Find Whatвведите текст, который вы хотите найти, для вашего примера:

<text>(.*)</text>

Часть регулярного выражения этого (.*) который гласит "соответствует любой последовательности символов, в том числе ни одной вообще, и захватить (сохранить) то, что вы выбрали".

Когда вы вводите текст, если вы смотрите в буфере, вы увидите Sublime, обрисовывающий сопоставляемый текст, так как мы включили "выделение совпадений".

в Replace With введите следующий текст:

<text><![CDATA[<audio preload="auto"><source src="https://www.mywebsite.com/sample.mp3"></audio>\1\?]]</text>

Волшебная часть здесь - это тот самый конец, который говорит \1\?; там написано: "вставьте первое, что мы записали в поле поиска, а затем знак вопроса"; остальная часть текста - это то, что вы указали в своем вопросе.

Если в вашем примере нет необходимости ставить вопросительный знак в конце текста (в своем примере вы его добавили), вам не нужно \? часть.

Теперь вы можете нажать Replace или же Replace Allи все случаи <text>something</text> будет заменен строкой замены, за исключением того, что не имеет значения, что something часть, потому что текст из исходной строки будет сохранен.

В зависимости от ваших реальных обстоятельств вам может потребоваться настроить это соответствующим образом (скажем, если ваш пример текста не очень хорошо изложен или что-то в этом роде).

Я рекомендую что-то вроде этого урока (с которым я также связался выше), чтобы получить более глубокое понимание того, что происходит. В частности, это объясняет, почему для добавления знака вопроса необходимо использовать \? и не только ?, который я полностью замял, потому что это отличное упражнение для читателя.;)

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