Как я могу искать и заменять обратные пометки тегами <code></code>? - PullRequest
0 голосов
/ 11 октября 2019

У меня большой текстовый файл с несколькими экземплярами текста, которые заключены в 3 обратных знака:

    ```
Default:
Publisher Bid Modifier Object with values=[]
    ```

   <td>

    ```
Publisher Bid Modifier Object
    ```

   </td>

Я хочу заменить эти обратные пометки тегами <code> , чтобы они выглядели так:

    <code>
Default:
Publisher Bid Modifier Object with values=[]
    </code>

   <td>

    <code>
Publisher Bid Modifier Object
    </code>


   </td>

Как найти и заменить текстовый редактор, такой как VS Code (или аналогичный)? Я использую MacBook.

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 12 октября 2019

Мы будем использовать регулярные выражения для поиска и замены данных в вашем текстовом файле.

Регулярные выражения ищут шаблоны в какой-либо форме данных. Данные могут быть файлом HTML, файлом слов (при условии, что вы знаете, как извлечь текст) или, в вашем случае, обычным текстовым файлом. Чтобы реализовать регулярное выражение, вам нужно использовать специальные символы для обозначения определенных функций шаблона. Функция findall имеет следующий вид:

re.findall(pattern,string)

Например, если вы хотите найти все слова «лестница» в документе, вы должны написать

re.findall("staircase",text)

где «лестница»"это шаблон, а текст это строка. Программа будет возвращать все экземпляры «лестница» в виде массива в тексте, который вы использовали в качестве ввода. Но что, если вы хотите также включить прописные версии лестницы, то есть «Лестница», предположив, что это было в начале предложения, например? В этом случае вы должны использовать специальные символы, о которых я говорил ранее: вместо этого вы должны написать следующий шаблон

re.findall("(S|s)taircase",text)

The |метасимвол означает либо контент слева, либо контент справа. Также обратите внимание, как скобки используются для группировки элементов, что часто встречается в регулярных выражениях. Таким образом, регулярное выражение ищет одну из следующих строк: «Лестница» или «лестница». Некоторые другие важные метасимволы в регулярных выражениях:

"\ w" соответствует любому символу "слова", поэтому "a", "b", "C" и "D" будут сопоставляться с этим метасимволом.

«\ W» соответствует любому несловесному символу, поэтому «1», «2», «>», «?» И «=» будут совпадать с этим метасимволом.

"\ s" соответствует любому символу пробела.

"\ S" соответствует любому символу без пробела.

"\ d" соответствует всем символам цифры, 0-9.

"\ D" соответствует любому нецифровому символу.

В дополнение к предыдущим метасимволам есть квантификаторы *, +,?, {N}, {min,} и{мин Макс}. Вот краткое описание этих метасимволов:

"*" соответствует нулю или более экземпляров предыдущего элемента.

"+" соответствует одному или нескольким вхождениям предыдущего элемента.

"?"соответствует нулю или одному вхождению предыдущего элемента.

"{n}" соответствует ровно n вхождений предыдущего элемента.

"{min,}" соответствует по меньшей мере минимальным вхождениям предыдущегоelement.

"{min, max}" совпадает между min и max вхождений предыдущего элемента (включая min и max).

Итак, чтобы дать пример того, что мы рассмотрели такДалее приведен пример шаблона с использованием группировки, символа или, квантификатора и метасимвола.

re.findall("(A|a)pple\d*",text)

Регулярное выражение будет находить все следующие подстроки: "Apple", "apple",«Apple0», «apple0», «Apple00», «apple00» и т. Д.

Теперь, когда мы познакомились с регулярными выражениями, мы можем приступить к написанию кода для решения вашей проблемы. используя Python.

import re
textFile = open(pathToTextFile,"r")
rawText = textFile.read()
textFile.close()
tags = ["<code>","</code>"]
count = 0
output = ""
for line in rawText.split("\n"):
    if "```" in line:
        output+=re.sub("```",tags[count%2],line)+"\n"
        count+=1
    else:
        output+=line+"/n"
outFile = open(pathToOutFile,"w")
outFile.write(output)
outFile.close()

Если на вашем компьютере установлен Python, откройте IDLE и создайте новый файл. Откроется новое окно. Здесь вы пишете свои команды.

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

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

Затем мы выполняем итерацию в каждой новой строке переменной rawText и всякий раз, когда видим тройные кавычки, мы заменяем одну изтеги, а затем обновите переменную count. В противном случае мы просто добавляем строку и переходим к следующему элементу цикла for.

Наконец, мы создаем новый файл для записи (вставляем ваш путь), записываем строку вывода и закрываем файл. И мы сделали! Выходные данные показаны ниже.

    <code>
Default:
Publisher Bid Modifier Object with values=[]
    </code>

   <td>

    <code>
Publisher Bid Modifier Object
    </code>

   </td>

Refs: https://en.wikipedia.org/wiki/Regular_expression;

1 голос
/ 11 октября 2019

Используйте регулярное выражение:

```([^`]*)```

и замените его на

<code>\1</code>
  • <code> и - это просто текстовые строки, может быть любым;
  • \1 - первая группа захвата из строки поиска;Кроме того, вы можете иметь \2, \3 ... в зависимости от того, что вы ищете;

Тест здесь .


Тем не менее, сделайте себе услугу и убедитесь, что «теги» правильно сопоставлены, либо до, либо после замены. Будет довольно сложно поймать четное количество несоответствий.

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