Comment remplacer toutes les chaînes par des nombres contenus dans chaque chaîne dans Notepad ++?


108

J'essaye de trouver toutes les valeurs avec le modèle suivant:

value="4"
value="403"
value="200"
value="201"
value="116"
value="15"

et remplacez-le par une valeur dans les portées.

J'utilise l'expression régulière suivante pour trouver le modèle:

.*"\d+"

Comment puis-je faire un remplacement?


2
Quelle est la pièce de rechange? Pouvez-vous donner un exemple?
Toto du

^. * value = "([^"] *) ". * $ vérifier cette expression régulière et répéter la valeur \ 1 là où la valeur nécessaire
Nikhil KS

Réponses:


191

Dans Notepad ++ pour remplacer, appuyez sur Ctrl+ Hpour ouvrir le menu Remplacer.

Ensuite, si vous cochez le bouton "Expression régulière" et que vous souhaitez que votre remplaçant utilise une partie de votre motif de correspondance, vous devez utiliser des "groupes de capture" (en savoir plus sur google ). Par exemple, disons que vous souhaitez faire correspondre chacune des lignes suivantes

value="4"
value="403"
value="200"
value="201"
value="116"
value="15"

en utilisant le .*"\d+"motif et que vous souhaitez conserver uniquement le numéro. Vous pouvez ensuite utiliser un groupe de capture dans votre modèle correspondant, en utilisant entre parenthèses (et ), comme ça: .*"(\d+)". Alors maintenant, dans votre remplacement, vous pouvez simplement écrire $1, où 1 $ fait référence à la valeur du premier groupe de capture et renverra le numéro pour chaque correspondance réussie. Si vous aviez deux groupes de capture, par exemple (.*)="(\d+)", $1renverra la chaîne valueet $2renverra le nombre.

Donc en utilisant:

Trouver: .*"(\d+)"

Remplacer: $1

Cela vous rendra

4
403
200
201
116
15

Veuillez noter qu'il existe de nombreuses façons alternatives et meilleures de faire correspondre le modèle susmentionné. Par exemple, le motif value="([0-9]+)"serait meilleur, car il est plus spécifique et vous serez sûr qu'il ne correspondra qu'à ces lignes. Il est même possible de faire le remplacement sans utiliser de groupes de capture, mais c'est un sujet légèrement plus avancé, donc je vais le laisser pour l'instant :)


19
Pour le remplacement, $1n'a pas fonctionné pour moi. J'ai utilisé à la \1place et cela a fonctionné.
Jason Wheeler

12
\1Fonctionne dans toutes les versions de Notepad ++. $1ne fonctionne que dans les plus récents.
Cullub

Je suppose que cela ne fonctionne pas avec le Hex Editorplugin. En mode d'affichage hexadécimal, Notepad ++ n'affiche pas l' Regular Expressionoption Rechercher / Remplacer. En mode d'affichage de texte, je vois l' Regular Expressionoption Rechercher / Remplacer. J'utilise Notepad ++ Version 6.9.2, qui est la version actuelle pour le moment.
Kevin Fegan

15

psxls a donné une excellente réponse mais je pense que ma version Notepad ++ est légèrement différente, donc la capture $ (signe dollar) n'a pas fonctionné.

J'ai Notepad ++ v.5.9.3 et voici comment vous pouvez accomplir votre tâche:

Recherchez le modèle: value = \ "([0-9] *) \" Et remplacez-le par: \ 1 (tout ce que vous voulez faire autour de ce groupe de capture)

Ex. Entourer avec crochets

[\ 1] -> produira value = "[4]"


1
\1M'a aidé à garder le numéro mais à supprimer la citation derrière. J'avais environ 7400 lignes dans un document comme tablename.columnname = '12345'. Le premier devis était facile à supprimer, le second a été fait en utilisant votre \1dans la zone de texte de remplacement. Merci, +1
Ben Fransen

6

Remplacer (.*")\d+(")

Avec $1x$2

xest votre «valeur à l'intérieur des portées».


0

J'ai Notepad ++ v6.8.8

Rechercher : [([a-zA-Z])]

Remplacer : [\ '\ 1 \']

Produira: $ array [XYZ] => $ array ['XYZ']


-3

Trouver: value="([\d]+|[\d])"

Remplacer: \1

Cela vous rendra vraiment

4
403
200
201
116
15

js:

a='value="4"\nvalue="403"\nvalue="200"\nvalue="201"\nvalue="116"\nvalue="15"';
a = a.replace(/value="([\d]+|[\d])"/g, '$1');
console.log(a);

3
Comment cette solution JavaScript est-elle liée à la question qui a été taguée avec Notepad ++?
Jason Aller

Comment les réponses erronées 1 et 2 peuvent-elles être liées à la question qui a été étiquetée avec Notepad ++?
user3178007

Pourquoi j'ai posé la question ici? Parce que je ne peux pas créer de questions. Parce que je n'ai pas assez de score de réputation.
user3178007

1
Il n'y a pas d'exigence de réputation pour poser des questions comme vous le prétendez - vous n'auriez pas pu être restreint. Réessayez: stackoverflow.com/questions/ask
BoltClock

La question a été posée. stackoverflow.com/questions/24112018/... Mais limité en termes de recherche. La limitation est!
user3178007
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.