web-dev-qa-db-fra.com

Supprimer tout sauf un certain motif

J'ai un fichier journal avec beaucoup de chaînes. Je voudrais tout supprimer de ce fichier (rechercher et remplacer) sauf toute chaîne commençant par: phone= et terminée par Digits=1

par exemple: phone=97212345678&step=1&digits=1

Pour trouver cette chaîne, j'utilise (phone=.*digits=1) et ça marche! mais je n'ai pas réussi à trouver la regex du tout sélectionner sauf cette chaîne et à tous les effacer.

exemple de fichier .

11
Eyal

Afin de supprimer tout sauf un texte spécifique, vous devez utiliser .*(text_you_need_to_keep).* avec . correspondant à une nouvelle ligne.

Dans Notepad ++, utilisez

Trouver : .*(phone=\S*?digits=1).*
Remplacer : $1

REMARQUE: . correspond à la nouvelle ligne option doit être coché.

J'utilise \S*? au lieu de .* à l'intérieur du motif de capture, car vous souhaitez uniquement faire correspondre le moins possible les caractères non-blancs, de phone= à la plus proche digits. .* est trop gourmand et peut s'étendre sur plusieurs lignes avec l'option DOTALL activée.

METTRE À JOUR

Lorsque vous souhaitez conserver quelques multiples occurrences d’un motif dans un texte, dans Notepad ++, vous pouvez utiliser

.*?(phone=\S*?digits=1)

Remplacez par $1\n. Avec cela, vous supprimerez toutes les sous-chaînes indésirables, à l'exception de celles qui suivent la dernière occurrence de votre sous-modèle nécessaire.

Vous devrez enlever le dernier morceau soit manuellement, soit avec

   FIND: (phone=\S*?digits=1).*
REPLACE: $1
15
Wiktor Stribiżew

Si vous utilisez des outils tels que Notepad ++ ou EditPlus, vous pouvez utiliser le remplacement de regex suivant:

Rechercher une chaîne: ^phone=(\d+&step=1&)digits=1

Remplacer la chaîne: \1

1
York Mak

Regex pour trouver le match:

/^phone=.+&digits=1$/

Pour remplacer le fichier sauf match:

/^(?!phone=.+&digits=1$).*/gm

0
Sandip Ransing

Disons que vous avez des données comme:

"pour le plan d'exécution [ID = 7420] au 06/12/2018 08:00:00" 

vous voulez extraire uniquement une partie [ID = dddd] de milliers de lignes . Dans le Bloc-notes ++, appuyez sur ctrl + h pour ouvrir la fenêtre, cochez l'expression régulière.

Trouver quoi: 

.*?(\[ID = \d+\]).*

Remplacer par: 

\1

Pour votre chaîne spécifique, regex serait:

.*?(phone=.*?digits=1).*
0
ozanmut