web-dev-qa-db-fra.com

Regex OR in notepad ++

Je voudrais trouver toutes les instances suivantes dans le bloc-notes ++

action421
action732
action983

mais ignorez toutes les autres combinaisons actionXXX.

Je recherche une expression régulière similaire à action(421)|(732)|(983) mais cela ne fonctionne pas. Quel regex ferait?

notepad ++ regex engine a-t-il même un opérateur OR?

30
Jonathan

On dirait que Don Ho a ajouté l'opérateur RegEx OR | au bloc-notes natif Notepad ++ Find dans le
dernière version du Bloc-notes (ver. 6.1.1).
Téléchargez le Bloc-notes 6.1.1 depuis ici

Installez le Bloc-notes 6.1.1, puis allez dans Rechercher-> Rechercher
Trouvez quoi: action(421|732|983)
Mode de recherche: (*) Regular Expression

Clique sur le Find Next bouton

35
user78706

Il est maintenant possible dans le Bloc-notes> = 10.1.1. Selon Dragos Toader : "La dernière version en date d'aujourd'hui ( Bloc-notes 10.1.1) prend en charge | dans RegEx "

== réponse originale ci-dessous ==

Ce n'est pas possible dans Notepad ++. Voir cette réponse.

Mais votre regex n'est pas correct. Celui-ci fonctionnerait: action(421|732|983) si Notepad ++ supportait le | en regex.

8
Rudie

Vous pouvez utiliser le plugin d'assistance regex pour Notepad ++, mais c'est plus pour le développement de regex que pour remplacer, mais si vous voulez juste le trouver, je pense que ce plugin peut être utile.

enter image description here

6
manojlds

Utilisez le plugin PythonScript Notepad ++ pour Python.
Voir ici pour les fonctions

Editor.pysearch(expression, function[, flags[, startLine[, endLine]]])

ou

Editor.pymlsearch(expression, function[, flags[, startPosition[, endPosition]]])  

Voici un programme simple utilisant la fonction de recherche python Expression régulière editor.pysearch ()
J'ai laissé beaucoup de code de débogage pour que vous puissiez voir ce qui se passe au cours de l'exécution de la fonction.

# $Revision: 1.3 $
# $Author: dot $
# $Date: 2012/04/19 00:03:26 $

from Npp import *
import re, string

expression = notepad.Prompt(
                 "Enter the RegEx search string then press Enter",
                 "RegEx and Search" ,
                 "")

debug = True
#debug = False

if debug:
    bufferID = notepad.getCurrentBufferID()

if debug:
    # Show console for debugging
    console.clear()
    console.show()

if expression != None:
    expressionSansNl = expression.replace('\r\n', '')

    if debug:
        console.write( expression + "\n" )

    # First we'll start an undo action, then Ctrl-Z will undo the actions of the whole script
    editor.beginUndoAction()

    if debug:
        console.write( 'editor.pysearch( r"%s" % expressionSansNl, None)\n' )

    editor.pysearch( r"%s" % expressionSansNl, None)

    # End the undo action, so Ctrl-Z will undo the above two actions
    editor.endUndoAction()

# Debug
if debug:
    notepad.activateBufferID(bufferID)

Mappez ce script au raccourci Notepad ++ Ctrl+<ChooseALetter> Et exécutez-le.
Tapez dans la recherche RegEx action(421|732|983)
Selon Python re documentation ici , l'opérateur RegEx | Est pris en charge.

Je n'ai pas testé cela - peut-être que le paramètre None dans la fonction pysearch () a besoin
pour être une fonction qui sélectionnera la chaîne résultante. Selon les documents ici ,
la fonction devrait retourner un python MatchObject. Je pense qu'il y a un moyen d'obtenir le
chaîne correspondante dans MatchObject et sélectionnez l'apparence suivante de cette correspondance
chaîne dans l'objet éditeur. Je publierai une nouvelle révision de la réponse une fois le codage terminé
et le tester.

1
user78706

Bloc-notes ++ ne prend pas en charge l'alternateur operator|. Vous pouvez essayer le textfx ctrl+R option regexp mais je pense que la même chose est vraie.

1
Alex K.

votre expression rationnelle semble être correcte. mais essayez d'utiliser ceci:

action(421|732|983)
0
Headshota