Regex remove line contient un caractère

0

J'ai une liste de valeurs qui me sont retournées et elles se terminent toutes par un | comme ci-dessous:

testdata1-old |
testdata |
test2-old|

Je veux supprimer toutes les lignes contenant -old. Quelle expression régulière puis-je utiliser?

utilisateur3738022
la source
1
Quel système d'exploitation, environnement ou langage de programmation utilisez-vous?
Steven
windows, environment ne sais pas ce que vous voulez dire, mais pour le moment, c’est en intégration et en langage qu’un regEX java serait bon ... un peu comme celui-ci, j’ai "^. +? \ SPM _. + $" mais il sert évidemment un purpose
user3738022
1
Quelle est l'entrée? Quelle est la sortie? Est-ce un fichier? Est-il utilisé dans un contexte de programmation avec Java? Script par lots?
Samir
L'entrée est une requête xpath qui donne cette sortie, son utilisation dans un contexte de programmation avec Java oui. Donc, une impression, écrire dans un fichier ne sera pas appropriée. La seule chose qui serait acceptable est une expression régulière. J'ai eu ce "^. + \ - old. + $" Mais c'est le contraire qui a été fait au lieu de tout supprimer avec -old
user3738022.

Réponses:

3

Je pense que vous avez un malentendu à propos des expressions régulières. Ils répondent fondamentalement à la question "ce texte ressemble-t-il à ce modèle particulier?" Il existe de nombreux outils qui utilisent des expressions régulières pour manipuler du texte, comme sedou grep, et je pense que vous confondez les deux.

Ce que vous devez faire est de former une expression régulière qui correspond au texte que vous souhaitez filtrer. Par exemple, l'expression que vous recherchez est ^.*-old\|$, et filtrez les lignes en utilisant quelque chose comme ceci.

foreach line in input_file
    if regex.matches(line, "^.*-old\|$") then
        continue
    else
        print line
Akinos
la source
Ok, je suis nouveau dans tout cela, alors je mélange mes termes, j'ai essayé l'expression seule et il ne fait rien, il ne supprime pas les lignes avec -old. Je
user3738022
J'ai essayé cette expression rationnelle "^. + \ - old. + $" Mais au lieu de supprimer ces lignes, il les garde
user3738022
En second lieu, les expressions rationnelles sont utilisées pour "répondre à la question" ou plutôt pour décrire le motif. Ils ne peuvent évidemment pas être ceux qui posent la question! ;-) Le cas échéant, c'est l'interprète qui pose la question "que voulez-vous que je cherche?".
Samir
Bon alors que puis-je utiliser pour filtrer cela et obtenir le résultat souhaité d'avoir toutes les lignes contenant -old supprimés
user3738022
@ user3738022 Le pseudo-code fourni par Nat affichera toutes les lignes qui ne correspondent pas à l'expression régulière. Si vous voulez pouvoir le retourner à une autre fonction en Java, vous pouvez créer un StringBuilder et l'ajouter lineà la elseclause au lieu de l'imprimer.
8bittree
0

Ce dont tu as besoin c'est

grep -v -E '^. * - ancien \ | $' fichier_entrée> fichier_sortie

ou ce qui devrait fonctionner de la même manière:

egrep -v '^. * - ancien \ | $' fichier_entrée> fichier_sortie

Maintenant, le plus difficile est de trouver une version Windows de grepou egrepexécutée à partir de cmd.exe ou de Powershell.

Hannu
la source
Merci mais comme vous l'avez dit la partie difficile trouver une version de Windows pour grrp ou egrep je ne veux pas utiliser cmd et powershell. Puis-je ne pas changer cette commande afin qu'elle supprime les lignes avec ancien au lieu de ne sélectionner que celles: ^. +? \ - old. + $
user3738022
regular-expressions.info/lookaround.html - negative lokaheadpourrait fonctionner, selon votre moteur de regex.
Hannu