Вопрос или проблема
Я пытаюсь извлечь числа между двумя тегами. Вот они <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.
- Откройте ваш XML-файл.
- Нажмите
Ctrl + H
для открытия диалогового окна «Замена». - В поле «Найти» вставьте регулярное выражение.
- В поле «Заменить на» вставьте строку замены.
- Убедитесь, что включены опции «Регулярные выражения» и «Учитывать регистр».
- Нажмите «Заменить все».
Результат
После выполнения описанных шагов, вы получите следующий вывод:
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-подобные структуры, добавляя произвольные значения. Подобные подходы могут быть адаптированы и для других форматов данных.