Multiline la recherche d'expressions Régulières et de les remplacer!

j'ai heurté un mur. Est-ce que quelqu'un connaît un bon éditeur de texte qui a la fonction de recherche et de remplacement comme Notepad++, mais qui peut aussi effectuer une recherche regex multiligne et remplacer? Fondamentalement, j'essaie de trouver quelque chose qui peut correspondre à un regex comme:

recherche oldlog(.*ns+([rn.]*));

remplacer newlog()

des idées?

26
demandé sur DVK 2009-09-18 00:03:07

14 réponses

ma recommandation personnelle est L'UltraEdit D'IDM Computing ( ) www.ultraedit.com ) - il peut faire des expressions régulières (rechercher et remplacer) avec la syntaxe Perl, Unix et UltraEdit. L'appariement multi-ligne est l'une des possibilités du mode Perl regex.

il possède également d'autres capacités de recherche intéressantes (p. ex. g recherche dans des colonnes de caractères spécifiques, recherche dans plusieurs fichiers, historique de recherche, favoris de recherche, etc...)

alt texte http://www.ultraedit.com/assets/images/new_features/ue_1500/searchincolumn.png

5
répondu DVK 2015-05-28 16:41:11

Notepad++ peut maintenant gérer des expressions régulières multi-lignes (il suffit de mettre à jour la dernière version - la fonctionnalité a été introduite vers le 12 mars).

j'avais besoin de supprimer toutes les déclarations onmouseout et onmouseover d'un document HTML et j'avais besoin de créer une correspondance multi-ligne non-cupide.

onmouseover=.?\s*".*?"

assurez-vous de cocher la case

[ ] . matches newline
si vous voulez utiliser la capacité de correspondance multi-ligne.
9
répondu Mark Salisbury 2012-06-15 16:37:03

EditPad Pro a de meilleures capacités regex que tout autre éditeur que j'ai utilisé.

aussi, je soupçonne que vous avez une erreur dans votre regex - [\r\n.] correspondra seulement retours chariot, nouvelles lignes, et arrêts complets. Si vous essayez de faire correspondre n'importe quel caractère (i.e. "dot operator plus CR et LF), essayez [\s\S] à la place.

8
répondu Ben Blank 2009-09-17 20:15:01

Le Zeus éditeur peut faire multi-lignes rechercher et remplacer.

5
répondu jussij 2009-09-21 00:25:48

j'utilise Eclipse , qui est libre et que vous pouvez déjà avoir si vous êtes un développeur. '\R ' agit comme délimiteur de ligne indépendant de la plate-forme. Voici un exemple de recherche multi-ligne:

recherche:

\bibitem. (\R. )?\R?{([^{] )}$\R^([^\]. [^}] $ \ R. $\R. )

et remplacer:

\defcitealias{$2}{$3}

5
répondu Vladtn 2010-05-09 20:21:53

Je suis presque sûr que Notepad++ peut le faire maintenant via le plugin TextFX (qui est inclus par défaut). Appuyez sur Contrôle-R dans le bloc-notes++ et jouez.

5
répondu Michael 2010-10-22 07:11:35

TextPad a de bonnes capacités de recherche Regex et de remplacement; Je l'ai utilisé pendant un certain temps et je suis assez heureux avec elle.

screenshot TextPad http://i31.tinypic.com/2bb22q.png

De la Caractéristiques :

moteur de recherche/remplacement puissant en utilisant Des expressions régulières de type UNIX, avec le pouvoir des macros d'édition. Jeux de les fichiers dans un l'arborescence des répertoires peut être recherché, et le texte peut être remplacé en tous les documents ouverts en même temps.

Pour plus d'options que vous pourriez avoir besoin, découvrez " Notepad++ "Alternatives 151920920" " au AlternativeTo.net .

4
répondu Donut 2009-09-17 20:24:23

vous pouvez utiliser Python Script plugin pour Multiline Regular Expression search et replace! - http://npppythonscript.sourceforge.net/docs/latest/scintilla.html?highlight=pymlreplace#Editor.pymlreplace

# This example replaces any <br/> that is followed by another on the next line (with optional spaces in between), with a single one
editor.pymlreplace(r"<br/>\s*\r\n\s*<br/>", "<br/>\r\n")
2
répondu pra 2012-04-07 19:46:01

j'utilise Notepad++ tout le temps mais C'est Regex a toujours été un peu manquant.

texte Sublime est ce que vous voulez.

2
répondu opticyclic 2012-06-07 12:49:16

EditPlus fait un bon travail à rechercher/remplacer à l'aide de regex (y compris multiligne)

1
répondu Philippe Leybaert 2009-09-17 20:09:05

vous pouvez utiliser Visual Studio. Téléchargez Express gratuitement si vous n'en avez pas de copie.

VS regex n'est pas standard, vous devez donc utiliser \n:b+[\r\n] à la place.

0
répondu Shane Castle 2009-09-17 20:07:43

la dernière version de UltraEdit a multiline trouver et remplacer le support W/ regex.

ou si vous êtes D'accord avec l'utilisation d'un outil d'expression régulière plus spécialisé pour cela, il y a regex Hero . Il a aussi pour avantage d'être capable de tout faire à la volée. En d'autres termes, vous n'avez pas à cliquer sur un bouton pour tester votre expression régulière parce qu'elle est automatiquement testée après chaque pression de touche.

personnellement, J'utiliserais UltraEdit si je cherche à remplacer du texte dans plusieurs fichiers. De cette façon, je peux juste sélectionner les fichiers à remplacer comme un lot et cliquez sur Remplacer. Mais si je travaille avec un seul fichier texte et que j'ai besoin d'écrire une expression régulière plus complexe, alors je la collerais dans Regex Hero et travaillerais avec elle là-bas. C'est parce que Regex Hero peut gagner du temps quand vous voyez tout ce qui se passe en temps réel.

0
répondu Steve Wortham 2009-09-17 20:46:10

ED for windows a deux versions de regex, trois sortes de couper et coller (sélection, lignes ou blocs, et vous pouvez passer de l'un à l'autre (contrairement à ultra edit, qui est clunky au mieux) avec juste un clic de souris pendant que vous mettez en surbrillance -- pas besoin de tirer vers le bas un menu. La vitesse à laquelle le travail est fait est incroyable, comme lire sur un Kindle, vous n'avez pas à y penser.

0
répondu Marc Plimsoll 2012-12-02 11:50:37

vous pouvez utiliser une version récente de Notepad++ (la mienne est 6.2.2).

Pas besoin d'utiliser l'option ". match newline " comme suggéré dans une autre réponse. Utilisez plutôt l'expression régulière adéquate avec ^ pour " début de ligne "et $ pour"fin de ligne". Ensuite, utilisez \r\n Après le $ pour une "nouvelle ligne" dans un fichier dos (ou juste \n dans un fichier unix car le retour de chariot est principalement utilisé pour le fichier texte dos / windows):

ex.: pour supprimer toutes les lignes commençant par tags OBJE après une ligne commençant par une étiquette UID ( d'un fichier gedcom-utilisé dans la généalogie), j'ai utilisé la recherche suivante regex:

^UID (.*)$\r\n^(OBJE (.*)$\r\n)+

et remplacer la valeur suivante:

UID \r\n

c'est la correspondance des lignes comme ceci:

UID 4FBB852FB485B2A64DE276675D57A1BA
OBJE @M4@
OBJE @M3@
OBJE @M2@
OBJE @M1@

et la sortie du remplacement est

UID 4FBB852FB485B2A64DE276675D57A1BA

550 occurrences ont été remplacées en moins d'une seconde. Notepad++ est vraiment efficace!

sinon, pour valider une expression régulière j'aime utiliser le testeur .net RegEx ( http://regexhero.net/tester / ). C'est vraiment génial d'écrire et de tester à la volée un Ex Reg...

PS.: Vous pouvez aussi utiliser [\s\S] dans votre regex pour correspondre à n'importe quel caractère, y compris les nouvelles lignes. Donc, si vous cherchez n'importe quel bloc de texte "multi-ligne" commençant par "xxx" et se terminant par "abc", le Regex suivant sera très bien: ^xxx[\s\S]*?abc$"*?" est pour faire correspondre le moins possible entre xxx et abc !!!

0
répondu Valery Letroye 2012-12-09 21:29:22