Відповіді:
Сортуйте рядки в алфавітному порядку, якщо їх ще немає, і виконайте наступні дії:
(на основі цього пов'язаного питання: Як знайти та видалити повторювані рядки з файлу за допомогою регулярних виразів? )
Control+F
Увімкніть "Замінити режим"
Увімкніть "Використовувати регулярне вираження" (значок із .*
символом)
У полі пошуку введіть^(.*)(\n\1)+$
У полі " замінити на " введіть$1
У цьому випадку або вдайтеся до рішення поза VS Code (див. Тут ), або - якщо ваш документ не дуже великий і ви не проти спамувати кнопку Замінити все - виконайте попередні кроки, але на кроках 4 і 5, введіть наступне:
(на основі Видалення конкретних повторюваних рядків без сортування )
Увага: блоки для файлів із занадто великою кількістю рядків (1000+); може призвести до збою коду VS; може вводити порожні рядки в деяких випадках.
пошук :((^[^\S$]*?(?=\S)(?:.*)+$)[\S\s]*?)^\2$(?:\n)?
замінити на :$1
а потім натисніть кнопку «Замінити все» стільки разів, скільки є дублікатів .
Ви дізнаєтесь, що достатньо, коли кількість рядків перестане зменшуватися при натисканні на кнопку. Перейдіть до останнього рядка документа, щоб слідкувати за цим.
^(.*)(\n\1)+$
. Після видалення повторюваних рядків я хочу переглянути всі рядки з повторюваним першим стовпцем у csv та хочу змінити регулярний вираз.
\r?
біт від іншої відповіді насправді не потрібен.
Ось дуже цікаве розширення: Трансформер
Особливості:
Для видалення повторюваних рядків:
Вилучає з документа повторювані рядки
Діє на вибір або поточний блок, якщо вибору немає
Я не грав з цим багато, окрім команди "Унікальні лінії", але це здається досить непогано виконаним (включаючи спробу макрореєстратора!).
Щоб додати у відповідь @ Marc.2377
Якщо замовлення важливе і вам не байдуже, що ви просто зберігаєте останній з дублікатів рядків, просто шукайте наступний повторний вираз, якщо ви хочете видалити дублікати непорожніх рядків
^(.+\n)(?=(?:.*\n)*?\1)
Якщо ви також хочете видалити повторювані порожні рядки, використовуйте *
замість+
^(.*\n)(?=(?:.*\n)*?\1)
і замінити нічим.
Це займе рядок і спробує випереджати ще кілька (можливо, 0) рядків, за якими слід точно вжити той самий рядок. Це видалить взяту лінію.
Це просто одноразовий вираз. Не потрібно спамувати кнопку заміни.
^(.+\n)(?=(?:.*\n)*?\1)
натомість, тому що ваш регекс видалив порожній рядок там, де цього не передбачалося. Оголошено все одно.
xxx(?=…)
це відповідність. Таким чином, це гарантує, що все, що випливає з "xxx" відповідає "...", але не сприяє пошуку. (?:…)
це лише дужка, яка не враховується в кількості дужок. .*\n
- це шаблон для (можливо, порожнього) рядка. *
означає, що може бути декілька рядків, навіть жоден. В ?
після того, як зірочки ( *
) означає , що ми хочемо , як кілька рядків , як це можливо. Як \1
випливає з цього виразу, ефект полягає в тому, що ми дивимося вперед на всі рядки, які не збігаються, \1
поки не знайдемо відповідність рядків \1
. Сподіваюся, це дає зрозуміти.
Щойно у мене виникла та сама проблема і я знайшов пакет Visual Studio Code "Сортувати рядки". Детальні відомості див. На ринку коду Visual Studio Code (наприклад, сортування ліній ).
Цей пакет має опцію "Сортування ліній (унікальних)", що зробило це для мене. Подбайте про будь-які пробіли на початку / кінці рядків. Вони впливають на те, чи вважаються лінії унікальними чи ні.
Встановіть розширення DupChecker , натисніть F1і введіть "Перевірити дублікати".
Він перевірить наявність дублікатів і запитає, чи бажаєте ви їх видалити.
Спробуйте знайти та замінити регулярним виразом .
Знайти:
^(.+)((?:\r?\n.*)*)(?:\r?\n\1)$
Замінити:
$1$2
Можна ввести деяку дисперсію в першу групу.
Насправді не в коді Visual Studio, але якщо він працює, він працює.
Це не найкраща відповідь, як ви вказали Код Visual Studio, але як я вже сказав: Якщо він працює, він працює :)
((^[^\S\r\n]*?(?=\S)(?:.*)+$)[\S\s]*?)^\2$(?:\r?\n)?
зробив краху vscode .... Я знайшов в одному файлі 229 рядків. :(