У меня есть этот текст:

D5 0.25 8;0.25 E5 0.25 8;0.5 F#5 1 8;1.5 E5 1 8;2.5 D5 1 8;3.5 B4 1 8;4.5 A4

За исключением того, что это 800 символов в длину ... Например, я хотел бы получить текст между D5 и E5 и заменить его одним пробелом. Так выглядит этот D5 E5, но, как я сказал, между ними есть разные значения.

2 ответа2

1

Пока "D5" и "E5" не появляются внутри блока, вы можете использовать регулярные выражения:

Поиск: D5.*?E5
Заменить на: D5 E5

Не забудьте включить режим поиска по регулярным выражениям

0

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

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

Поиск для ([A-Z]#*.).+?;.+?  (обратите внимание на пробел в конце. Я использовал ALT+255, потому что SuperUser удаляет его в противном случае.)
И заменить на: \1  (также обратите внимание на пробел в конце, также ALT+255 там.)

Он сделает все замены, кроме самой последней заметки, если только в конце нет пробела.

Регулярное выражение объяснило:

(                - Start Capture group
  [A-Z]          - Search for any char between A and Z, exactly 1 time
  #*             - Search for a # 0 or more times
  .              - Search for any character exactly 1 time.
)                - End capture group
                 ------------------
                 The above search will result in the midi note, eg A3 and store it in \1

.+?              - Continue to search for any character 1 or more times in non-greedy way.
;                - Search until we find the first ;
.+?              - Search for any character 1 or more times in non-greedy way.
                 - search until we find a space.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .