Eksportuj wszystkie dopasowania wyrażeń regularnych w Textpad lub Notepad ++ jako listę

28

Czy w Textpad lub Notepad ++ istnieje możliwość wyeksportowania wszystkich dopasowań dla znalezienia wyrażeń regularnych jako pojedynczej listy?

W dużym pliku tekstowym szukam znaczników (słów zawartych w%%), używając wyrażeń regularnych %\< and \>%, i chcę, aby wszystkie dopasowania były pojedynczą listą, dzięki czemu mogę usunąć duplikaty za pomocą programu Excel i uzyskać listę unikatowych znaczników.

Kiranshell
źródło
Jeśli używasz wtyczki RegexExtract dla Notepad ++, może ona usunąć duplikaty za Ciebie i nie ma potrzeby późniejszego przetwarzania w programie Excel.
R. Schreurs,

Odpowiedzi:

53

Można to osiągnąć za pomocą funkcji Odwołania wsteczne oraz funkcji Znajdź i zaznacz w Notepad ++.

  1. Znajdź dopasowania za pomocą wyrażenia regularnego (powiedzmy %(.*?)%) i zastąp je \n%\1%\n, po tym będziemy mieć nasze słowo docelowe w osobnych wierszach (tzn. Żadna linia nie będzie zawierała więcej niż jednego dopasowanego słowa)

  2. Użyj funkcji Wyszukaj -> Znajdź -> Zaznacz, aby zaznaczyć każdą linię wyrażeniem regularnym %(.*?)%i pamiętaj, aby zaznaczyć „ Zakładkę linii ” przed zaznaczeniem tekstu

  3. Wybierz Szukaj -> Zakładka -> Usuń nieoznaczone linie
  4. Zapisz pozostały tekst. Jest to wymagana lista.
Ankit
źródło
Mam jeszcze jeden plik z tagami <> zamiast%%, próbowałem z <(. *?)> I \ n <\ 1> \ n, ale to nie działa, proszę o pomoc.
Kiranshell,
nie ma za co :) Dla mnie też działa dla <>. Czy są zagnieżdżone <>? Czy możesz wyjaśnić, co dokładnie „nie działa”?
Ankit
Próbuję utworzyć listę tagów jak poprzednio, ale kiedyś mają one <>, używam <(. *?)> Zamiast% (. *?)% I \ n <\ 1> \ n zamiast \ n % \ 1% \ n, to jest link do przykładowego pliku wikisend.com/download/158050/tags.txt
Kiranshell
Próbowałem ponownie z podanym tekstem i używając <(. *?)>, Działa normalnie. Mam listę tagów <Supplies> <nazwa_hosta> ..... i tak dalej
Ankit
Podaj dokładny błąd / problem, który masz. Może to zabrzmi głupio, ale pamiętaj, aby przesunąć kursor na górę. Często popełniam ten błąd i wyszukiwanie nie zwraca rezultatu ... :)
Ankit
5

Czy robienie tego w Notepad ++ jest obowiązkowe? Czy korzystasz z systemu Windows lub jakiejś formy Uniksa? Jeśli korzystasz z systemu Windows, możesz to zrobić (częściowo) z wiersza polecenia:

findstr / R "% [AZ]. * [AZ%]% [AZ%]" your_file > nowy_plik

findstrjest niejasno zainspirowany grep, więc ten nowy_plik zawiera wszystkie wiersze pasujące do twoich kryteriów wyszukiwania; możesz następnie użyć Notepad ++, aby usunąć niechciany tekst (na lewo od pierwszego% i na prawo od drugiego).


Oczywiście, jeśli korzystasz z Uniksa, możesz wykonać równoważne zadanie sed.

Scott
źródło
z daleka najlepsza odpowiedź!
Charles-Antoine Fournel
2

Istnieje wtyczka Notepad ++, która może kopiować dopasowane wyrażenie regularne do nowego pliku w nowej karcie. RegexExtract

Ponieważ nie znalazłem żadnej wtyczki do Notepad ++, która mogłaby wyodrębnić tekst z bieżącego dokumentu lub wszystkich plików z lokalizacji z dodatkowymi ustawieniami (np. Konwersja wielkości liter), postanowiłem spróbować zrobić to sam. (...) Interfejs wtyczki jest dość prosty (...). (...) Pola „Znajdź”, „Zamień” i „Maska” używają składni wyrażenia regularnego C ++ 11. Wyodrębnianie z plików działa teraz tylko dla plików w UTF8.

Edytuj dane wejściowe okna dialogowego dostosowane do pytania

wprowadź opis zdjęcia tutaj

Na obrazku widać, jak wypełnić okno dialogowe. Zakładam, że słowo nie zawiera spacji itp., A jedynie znaki pasujące do \ w. Szczególnie:

  • Użyj pary nawiasów, aby umożliwić wybranie słowa, bez znaków pośrednich.
  • Wybierz opcję Wyodrębnij z zamień , aby wybrać pierwsze dopasowanie. W przeciwnym razie otrzymasz wynik kolumnowy o wartości 1 USD, 2 USD itp.
  • Zaznacz Pomiń $ i ..., aby pominąć pełne dopasowania.
  • Zaznacz Filtr unikalny, aby raportować każde dopasowanie tylko raz.
  • Kliknij Wyodrębnij, aby wybrać uzyskać wyniki. ( Wyszukiwanie wyszukuje tylko dopasowania, ale nie zgłasza).
Greck
źródło
Ładna wtyczka, robi dokładnie to, o co poproszono.
R. Schreurs,
Wygląda na to, że nie działa z 64-bitowym Notepad ++
Ivan Chau
0

W TextPad przywołujesz Findpole jak zwykle, a następnie używasz Mark Allprzycisku.

Stamtąd użyj Copy Bookmarked Linesfunkcji. (Edycja menu> Kopiuj inne> Linie zakładek).

daveloyall
źródło
Osobiście wykonuję tę dokładną operację tak często, że skonfigurowałem skrót klawiaturowy dla funkcji Kopiuj zaznaczone linie: Ctrl + Alt + c.
daveloyall
Przyszedłem do tego pytania, ponieważ szukałem pytania Notepad ++. Po wielu latach jako lojalny i nieopłacalny użytkownik TextPada przechodzę do Notepad ++ (GPL).
daveloyall