как извлечь число между тегами, а затем добавить некоторое число?

Вопрос или проблема

Я пытаюсь извлечь числа между двумя тегами. Вот они <startSample>с номером</startSample> и <pitch>номер с точкой</pitch>, затем добавляя 10000 и 10200

пример текста :

<audGrainData>
  <startSample>253</startSample>
  <pitch>14.1668348</pitch>
</audGrainData>
<audGrainData>
  <startSample>2390</startSample>
  <pitch>14.1668348</pitch>
</audGrainData>
<audGrainData>
  <startSample>4521</startSample>
  <pitch>14.1668348</pitch>
</audGrainData>
<audGrainData>
  <startSample>6475</startSample>
  <pitch>14.1668348</pitch>
</audGrainData>
<audGrainData>
  <startSample>8547</startSample>
  <pitch>14.2084284</pitch>
</audGrainData>

и я хочу, чтобы это выглядело так:

  253 14.1668348 10000 10200
  2390 14.1668348 10000 10200
  4521 14.1668348 10000 10200
  6475 14.1668348 10000 10200
  8547 14.2084284 10000 10200

  • Ctrl+H
  • Найти что: <audGrainData>\s+<startSample>(.+?)</startSample>\s+<pitch>(.+?)</pitch>\s+</audGrainData>\s*
  • Заменить на: $1 $2 10000 10200\n вы можете использовать \r\n для конца строки Windows
  • ПОМЕТИТЬ Учитывать регистр
  • ПОМЕТИТЬ Обход вокруг
  • Режим поиска Регулярное выражение
  • УБРАТЬ отметку . соответствует переводу строки
  • Заменить все

Объяснение:

<audGrainData>          # буквально
\s+                     # 1 или более пробелов, включая перенос строки
<startSample>           # буквально
(.+?)                   # группа 1, 1 или более любых символов
</startSample>          # буквально
\s+                     # 1 или более пробелов, включая перенос строки
<pitch>                 # буквально
(.+?)                   # группа 2, 1 или более любых символов
</pitch>                # буквально
\s+                     # 1 или более пробелов, включая перенос строки
</audGrainData>         # буквально
\s*                     # 0 или более пробелов, включая перенос строки

Скриншот (до):

введите описание изображения здесь

Скриншот (после):

введите описание изображения здесь

Ответ или решение

Для решения задачи извлечения чисел между тегами <startSample> и <pitch>, а затем добавления к ним чисел 10000 и 10200, мы можем воспользоваться регулярными выражениями. В данной инструкции будет рассмотрен пошаговый метод выполнения этой задачи.

Шаг 1: Подготовка данных

Имеется следующий пример входных данных:

<audGrainData>
  <startSample>253</startSample>
  <pitch>14.1668348</pitch>
</audGrainData>
<audGrainData>
  <startSample>2390</startSample>
  <pitch>14.1668348</pitch>
</audGrainData>
<audGrainData>
  <startSample>4521</startSample>
  <pitch>14.1668348</pitch>
</audGrainData>
<audGrainData>
  <startSample>6475</startSample>
  <pitch>14.1668348</pitch>
</audGrainData>
<audGrainData>
  <startSample>8547</startSample>
  <pitch>14.2084284</pitch>
</audGrainData>

Шаг 2: Регулярное выражение

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

<audGrainData>\s*<startSample>(.+?)<\/startSample>\s*<pitch>(.+?)<\/pitch>\s*<\/audGrainData>\s*

Объяснение выражения:

  • <audGrainData> — ищем начало блока.
  • \s* — допускаем любые пробелы и переносы строк.
  • <startSample>(.+?)<\/startSample> — захватываем значение между тегами <startSample>, добавляя его в первую группу, и завершаем тег.
  • \s* — снова допускаем пробелы и переносы строк.
  • <pitch>(.+?)<\/pitch> — захватываем значение между тегами <pitch>, добавляя его во вторую группу, и завершаем тег.
  • \s*<\/audGrainData> — завершаем блок </audGrainData>, снова допускаем пробелы и переносы строк.

Шаг 3: Замена с использованием регулярного выражения

Выполнив поиск по вышеуказанному шаблону, можно осуществить замену на следующую строку:

$1 $2 10000 10200\n

Объяснение строки замены:

  • $1 — значение из первой группы (число ).
  • $2 — значение из второй группы (число ).
  • 10000 10200 — фиксированные числа, которые добавляются к результату.
  • \n — перевод строки, позволяющий выводить каждый результат отдельно.

Шаг 4: Применение замены

Для осуществления замены можно использовать различные текстовые редакторы с поддержкой регулярных выражений, такие как Notepad++, Sublime Text или Visual Studio Code.

  1. Откройте ваш XML-файл.
  2. Нажмите Ctrl + H для открытия диалогового окна «Замена».
  3. В поле «Найти» вставьте регулярное выражение.
  4. В поле «Заменить на» вставьте строку замены.
  5. Убедитесь, что включены опции «Регулярные выражения» и «Учитывать регистр».
  6. Нажмите «Заменить все».

Результат

После выполнения описанных шагов, вы получите следующий вывод:

253 14.1668348 10000 10200
2390 14.1668348 10000 10200
4521 14.1668348 10000 10200
6475 14.1668348 10000 10200
8547 14.2084284 10000 10200

Эта структура удобно читается и отвечает требованиям вашего запроса.

Заключение

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

Оцените материал
Добавить комментарий

Капча загружается...