J'ai donc un gros fichier texte qui ressemble à ceci:
<option value value='1' >A
<option value value='2' >B
<option value value='3' >C
<option value value='4' >D
Cela fait plusieurs centaines de lignes et je ne veux vraiment pas le faire manuellement. L'expression que j'essaie d'utiliser est:
<option value='.{1,}' >
Qui fonctionne comme prévu lorsque je l'exécute via plusieurs testeurs d'expression régulière en ligne. En gros, je veux tout supprimer avant A, B, C, etc. Le problème, c'est que lorsque j'essaie d'utiliser cette expression dans Vim et Notepad ++, il ne semble rien y trouver.
Tout ce qui précède leA,B,C, etc.
Cela semble si simple que je dois vous mal interpréter. C'est juste
:%s/<.*>//
Dans Notepad ++, vous n'avez pas besoin d'utiliser des expressions régulières pour cela.
Maintenez la touche Alt enfoncée pour vous permettre de sélectionner un rectangle de texte sur plusieurs lignes à la fois. Sélectionnez le morceau dont vous souhaitez vous débarrasser, puis appuyez sur la touche Suppr.
Dans le Bloc-notes ++:
<option value value='1' >A
<option value value='2' >B
<option value value='3' >C
<option value value='4' >D
Find what: (.*)(>)(.)
Replace with: \3
Replace All
A
B
C
D
Il y a une solution très simple à cela à moins que je n'aie pas compris le problème. L'expression régulière suivante:
(.*)(>)(.*)
correspondra au modèle spécifié dans votre message.
Donc, dans notepad ++, vous trouvez (.*)(>)(.*)
et vous le remplacez par \3
.
Les expressions régulières sont fondamentalement gourmandes en ce sens que si vous spécifiez (.*)
, cela correspond à toute la ligne et vous souhaitez le décomposer de manière à ce que vous puissiez extraire la chaîne que vous souhaitez conserver. Ici, j’ai fait exactement la même chose et cela fonctionne très bien dans Notepad ++ et Editplus3.
Votre solution d'origine pose deux problèmes. Tout d'abord, votre exemple de texte:
<option value value='1' >A
a deux occurrences du mot "valeur". Votre regex ne le fait pas. De plus, vous devez sortir de l’attelle d’ouverture dans le quantificateur de votre regex ou Vim l’interprétera comme une accolade littérale. Cette expression rationnelle fonctionne:
:%s/<option value value='.\{1,}' >//g
Cela va supprimer la balise option
et laisser les lettres dans vim:
:%s/<option.*>//g
Cela peut aider si vous êtes moins précis. Votre expression est "gourmande" et peut être interprétée de différentes manières par différents programmes Essayez ceci dans vim:
%s/^<[^>]+>//
En vim
:%s/<option value='.\{1,}' >//
ou
:%s/<option value='.\+' >//
Dans les expressions rationnelles vim, vous devez échapper au symbole un ou plus, en capturant les parenthèses, Le nombre délimité par des accolades et quelques autres.
Voir :help /magic
pour voir quels caractères spéciaux doivent être ignorés (et comment changer cela).
Dans le bloc-notes ++
Chercher
(<option value="\w\w">)\w+">(.+)
Remplacer par
\1\2
Ayant le même problème (avec jQuery "done ...", mais seulement dans Notepad ++, j'ai reçu de bonnes réponses amicales (qui m'ont permis de comprendre ce que j'avais manqué), puis j'ai passé du temps à construire une étape détaillée en plusieurs étapes, voir Recherche d'une ligne commençant à l'aide d'une expression régulière dans le Bloc-notes ++
Versailles, mardi 27 avril 2010 22:53:25 +0200
Notepad ++: Mode de recherche = expression régulière
Trouver quoi: (. *>) (.)
Remplacer par:\2
Un peu après les faits, mais au cas où cela serait utile à qui que ce soit, j’ai pu suivre l’un des exemples présentés ici (par sdgfsdg) et choisir rapidement Expressions régulières pour Notepad ++.
De même, j'ai dû extraire des données redondantes d'une liste d'options déroulantes de sélection HTML, de la forme:
<select>
<option value="AC">saint_helena">Ascension Island</option>
<option value="AD">andorra">Andorra</option>
<option value="AE">united_arab_emirates">United Arab Emirates</option>
<option value="AF">afghanistan">Afghanistan</option>:
...
</select>
Et ce que je voulais vraiment, c'était:
<select>
<option value="AC">Ascension Island</option>
<option value="AD">Andorra</option>
<option value="AE">United Arab Emirates</option>
<option value="AF">Afghanistan</option>
...
</select>
Après avoir tiré les cheveux en quatre, j'ai réalisé qu'à partir de la version 5.8.5 (septembre 2010), les expressions rationnelles ne semblaient toujours pas autoriser certaines boucles dans les expressions (à moins qu'il y ait une autre syntaxe), par exemple, ce qui suit trouverait même "> united_arab_emirated_emirates"> malgré ses traits de soulignement supplémentaires:
(">)([a-z]+([_]*[a-z]*)*)(">)
Cette requête a fonctionné dans les outils les plus génériques RegEx mais au sein de Notepad ++, je devais comptabiliser manuellement le nombre maximal de caractères de soulignement imbriqués (qui était malheureusement de 8), en utilisant le beaucoup plus laid:
(">)([a-z]+[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*)[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*[_]*[a-z]*(">)
Si quelqu'un connaît un moyen de simuler une boucle Regex dans la fonctionnalité de remplacement du Notepad ++, veuillez me le faire savoir.
Cela fonctionnera. Testé dans mon vim. les guillemets simples sont le problème.
1,$s/^<option value value=['].['] >/
Voici un bel article sur Notepad ++ Expressions régulières
http://markantoniou.blogspot.com/2008/06/notepad-how-to-use-regular-expressions.html
Vim:
:% s /.*> //
Très simple il suffit de trouver:
<option value value=.*?>
et cliquez sur Remplacer