Exporter toutes les correspondances d'expressions régulières dans Textpad ou Notepad ++ sous forme de liste

28

Dans Textpad ou Notepad ++, existe-t-il une option pour exporter toutes les correspondances pour une recherche d'expression régulière, sous forme de liste unique?

Dans un gros fichier texte, je recherche des balises (mots inclus dans%%), en utilisant une expression régulière %\< and \>%, et je veux toutes les correspondances en une seule liste, afin de pouvoir supprimer les doublons à l'aide d'Excel et obtenir une liste de balises uniques.

Kiranshell
la source
Si vous utilisez le plugin RegexExtract pour Notepad ++, il peut supprimer les doublons pour vous et il n'est pas nécessaire de post-traiter avec Excel.
R. Schreurs

Réponses:

53

Vous pouvez y parvenir en utilisant les références arrières et la fonctionnalité Rechercher et marquer dans Notepad ++.

  1. Trouvez les correspondances en utilisant l'expression régulière (disons %(.*?)%) et remplacez-la par \n%\1%\n, après cela, nous aurons notre mot cible sur des lignes distinctes (c'est-à-dire qu'aucune ligne n'aura plus d'un mot correspondant)

  2. Utilisez la fonctionnalité Rechercher -> Rechercher -> Marquer pour marquer chaque ligne avec l'expression régulière %(.*?)%et n'oubliez pas de cocher « Marque-page » avant de marquer le texte

  3. Sélectionnez Rechercher -> Signet -> Supprimer les lignes non marquées
  4. Enregistrez le texte restant. C'est la liste requise.
Ankit
la source
J'ai un fichier de plus avec <> comme balises au lieu de%%, j'ai essayé avec <(. *?)> Et \ n <\ 1> \ n, mais cela ne fonctionne pas, veuillez aider.
Kiranshell
vous êtes les bienvenus :) Pour moi, son travail pour <> aussi. Y a-t-il des imbriqués <>? Pourriez-vous préciser ce qui ne fonctionne pas exactement?
Ankit
J'essaie de faire une liste de balises comme avant mais celles-ci ont une fois <>, j'utilise <(. *?)> Au lieu de% (. *?)% Et \ n <\ 1> \ n au lieu de \ n % \ 1% \ n, ceci est le lien vers un exemple de fichier wikisend.com/download/158050/tags.txt
Kiranshell
Je l'ai réessayé avec le texte fourni et en utilisant <(. *?)>, Cela fonctionne normalement. J'ai reçu la liste des balises <Supplies> <hostname> ..... et ainsi de suite
Ankit
Veuillez mentionner l'erreur / le problème exact que vous rencontrez. Cela peut sembler idiot, mais n'oubliez pas de déplacer le curseur vers le haut.Je fais souvent cette erreur et la recherche ne renvoie aucun résultat ... :)
Ankit
5

Est-ce que cela dans Notepad ++ est une exigence obligatoire? Êtes-vous sous Windows ou sous une forme Unix? Si vous êtes sous Windows, vous pouvez le faire (en partie) à partir de l'invite de commandes:

findstr / r "% [az]. * [az] %% [az]%" votre_fichier > nouveau_fichier

findstrest vaguement inspiré par grep, donc ce nouveau_fichier contiendra toutes les lignes correspondant à vos critères de recherche; vous pouvez ensuite utiliser Notepad ++ pour supprimer le texte indésirable (à gauche du premier% et à droite du second).


Et, bien sûr, si vous êtes sous Unix, vous pouvez effectuer la tâche équivalente avec sed.

Scott
la source
de loin la meilleure réponse!
Charles-Antoine Fournel
2

Il existe un plugin Notepad ++ qui peut copier l'expression regex correspondante dans un nouveau fichier dans un nouvel onglet. RegexExtract

Parce que je n'ai trouvé aucun plugin pour Notepad ++ qui puisse extraire du texte du document actuel ou tous les fichiers d'un emplacement avec des paramètres supplémentaires (comme la conversion de casse), j'ai décidé d'essayer de le faire moi-même. (...) L'interface du plugin est assez simple (...). (...) Les champs "Rechercher", "Remplacer" et "Masquer" utilisent la syntaxe d'expression régulière C ++ 11. L'extraction à partir de fichiers ne fonctionne actuellement que pour ceux en UTF8.

Modifier l' entrée de dialogue adaptée à la question

entrez la description de l'image ici

Dans l'image, vous pouvez voir comment remplir la boîte de dialogue. Je suppose qu'un mot ne contient pas d'espaces, etc., uniquement des caractères correspondant à \ w. Notamment:

  • Utilisez une paire de crochets pour permettre de sélectionner le mot, sans les caractères de percetange.
  • Choisissez l'option Extraire avec remplacer pour sélectionner la première correspondance. Sinon, vous obtiendrez une sortie en colonnes de tous les $ 1, $ 2, etc.
  • Cochez Skip $ & ... pour exclure les correspondances complètes.
  • Cochez Filtre unique pour signaler chaque correspondance une seule fois.
  • Cliquez sur Extraire pour sélectionner obtenir des résultats. (La recherche ne trouve que les correspondances, mais ne rapporte pas).
Greck
la source
Joli plug-in, fait exactement ce qui a été demandé.
R. Schreurs
Semble ne pas fonctionner avec le bloc-notes 64 bits ++
Ivan Chau
0

Dans TextPad, vous affichez la Findboîte comme d'habitude, puis utilisez le Mark Allbouton.

De là, utilisez la Copy Bookmarked Linesfonction. (Menu Edition> Copier autre> Lignes marquées.)

daveloyall
la source
Personnellement, je fais cette opération si souvent que j'ai configuré un raccourci clavier pour la fonction Copier les lignes marquées: Ctrl + Alt + c.
daveloyall
Je suis venu à cette question parce que je cherchais la question Notepad ++. Après de nombreuses années en tant qu'utilisateur fidèle et non payant de Textpad, je passe au Notepad ++ (GPL).
daveloyall