Установить разницу в Notepad ++ с помощью регулярных выражений - PullRequest
0 голосов
/ 25 февраля 2020

Предположим, у меня есть два файла main.txt и sub.txt. Предположим, что оба файла имеют уникальные строки, т.е. одна и та же строка текста не встречается дважды ни в одном файле. Также предположим, что в обоих файлах нет пустых строк. Теперь рассмотрим файлы как наборы строк, где каждый член набора встречается в строке. Это возможно из-за нашего условия уникальности. Теперь предположим, что sub.txt является подмножеством main.txt таким образом. Как мы вычисляем разницу в наборах main.txt и sub.txt, чтобы создать новый файл diff.txt? Для ясности, строк в diff.txt должны быть теми, которые встречаются в main.txt, но не в sub.txt. В diff.txt не должно быть пустых строк. Порядок в diff.txt не имеет значения.

Пример

main.txt:

Hello
World
How
You
Are

sub.txt:

World
Hello

diff.txt :

How
Are
You

Бонусные вопросы

  1. Как я могу сказать, что один набор на самом деле является подмножеством другого? Это предположение в вопросе, но на практике мы не можем знать это наверняка и хотели бы иметь способ проверить это автоматически.
  2. Как я могу определить, действительно ли строки в каждом файле уникальны?
  3. Как узнать, нет ли пустых строк?

1 Ответ

0 голосов
/ 25 февраля 2020

Бонусный ответ

Сначала я отвечу на бонусные вопросы. Выполните следующие шаги, чтобы убедиться в правильности условий, указанных в вопросе:

  • Откройте оба файла в Notepad ++ и закройте все остальные файлы
  • Лексографически сортируйте каждый файл: https://superuser.com/questions/762279/sorting-lines-in-notepad-without-the-textfx-plugin
  • Убедитесь, что у следующего регулярного выражения нет совпадений ни в одном файле, что гарантирует отсутствие дубликатов: ^(.+$\r\n)\1. Если вы хотите удалить дубликаты, замените все вхождения этого регулярного выражения на \1.
  • Убедитесь, что ни в одном файле нет пустых строк, выполнив поиск ^$. Если они найдены, вы можете удалить их вручную.
  • Создайте третий файл и вставьте в него содержимое как sub.txt, так и main.txt. Затем лексографически рассортируйте его. Подсчитайте количество вхождений регулярного выражения: ^(.+$)\r\n\1, чтобы обнаружить повторяющиеся строки. Если число соответствует количеству строк в sub.txt, то это подмножество main.txt. Сохраните этот файл на потом.

Основной ответ

В третьем файле, который вы создали в последней части, найдите ^(.+$)\r\n\1\r?\n? и замените его пустой строкой. Это удалит все элементы sub.txt из main.txt, оставляя вас с diff.txt.

Примечание: Этот подход может оставить вас с одной пустой строкой в ​​конце diff. TXT, в случае, когда там был найден дубликат. В этом случае просто удалите его вручную.

...