Удалить строки из текста между идентичными парами символов (используя регулярное выражение или иное) - PullRequest
0 голосов
/ 01 апреля 2020

У меня есть длинные текстовые файлы (файлы субтитров .srt, на самом деле), которые, к сожалению, содержат много не относящейся к делу или отвлекающей информации.

Весь нерелевантный текст заключен в одинаковые пары символов (абзаца):

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

Это важно, и «мусорный тра sh мусорный мусор» Я бы хотел оставить его.

Очевидно, я хочу удалить все между символами and и оставить все остальное. Не имеет значения, удаляются или сохраняются сами символы or: если они сохраняются, тривиально просто удалить их непосредственно с последующим поиском / заменой - так что мне просто нужно любое совпадение с шаблоном.

Обратите внимание, что символы come состоят из одинаковых пар, так что это не так просто, как, например, убрать все между [асимметричными символами].

Я не работаю на какой-либо конкретной платформе. На самом деле, я надеялся использовать веб-инструмент для этого , как этот .

Мне просто нужно регулярное выражение - если кто-нибудь может помочь! В качестве альтернативы, если есть способы лучше, чем регулярное выражение, я был бы признателен за предложения.

Редактировать: было предложено, чтобы этот вопрос ( Удалить текстовые разделители в строке (используя регулярное выражение) ?) ) отвечает на то, что я ищу. Спасибо, но, к сожалению, это не так. Это относится к использованию в C# (чего я не знаю), и ответы на этот вопрос не объясняют, как именно воспроизвести то, что я хочу. Я хочу, чтобы он работал в онлайн-инструменте, с которым я связывался.

Обновление: Хороший ответ работает, но только если нежелательный текст появляется в строке. Мне также нужно, чтобы удалить текст, где вся строка является нежелательной:

779 00: 35: 52,216 -> 00: 35: 54,784

Я уже скучаю по нему.

780 00: 36: 00,291 -> 00: 36: 03,727

¶ Если вам когда-нибудь понадобится кто-то ¶

665

00: 30: 21,821 - -> 00: 30: 25,589

¶ По ощущениям

иногда вы хотите ¶

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

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

Окончательное (надеюсь) обновление

Для справки и благодаря пользователю MDR у нас есть решение: (¶[\S\s]*?¶)

Ответы [ 2 ]

1 голос
/ 02 апреля 2020

Если я могу предложить regexr.com . Используйте шаблон ¶.*?¶, а затем переключитесь на Замените секцию , как показано на скриншоте.

enter image description here

1 голос
/ 02 апреля 2020

Обновлено из-за новой информации, о которой идет речь, и комментариев под этим ответом.

Этот онлайн-инструмент, который вы цитировали, кажется, извлекает текст (возможно, не то, что вы хотите здесь - вы хотите удалить найденный бит). Возможно, вместо этого используйте локальный текстовый редактор (xed, Gedit, Textedit, TextWrangler, Visual Code Studio, Atom, NotePad ++ на Windows et c.), Который имеет функцию поиска и замены, но с параметром регулярного выражения и поиском ...

(¶[\S\s]*?¶)

... и заменить ничем. Демо: https://regex101.com/r/4v9gXj/8

...