Résolu Regex pour supprimer un bloc entre parenthèse

Plus d'informations
il y a 2 ans 9 mois - il y a 2 ans 9 mois #30883 par Guardiola gabriel
Hello

j'ai un ensemble de fichiers à renommer et je cherche à supprimer des blocs de chaine entre parenthèse (tout en laissant d'autres chaines de caractères entre parenthèse)

voici les lignes, je veux supprimer "(hoho-Empire)"
"this is a test (2020) (digital) (hoho-Empire)"


bon j'ai bidouillé cela, mais c'est visiblement un poil violent:
PS C:\> "this is a test (2020) (digital) (hoho-Empire)" -replace "\(.+empire\)",""
this is a test


de ce que je comprends la regex, qui va de gauche à droite, prend la première parenthèse jusqu'à "Empire)" et donc prend "(2020) (digital) (hoho-Empire)"

Evidement j'ai n'importe quelle chaine de caractères et longueur entre "(" et "empire)" mais je veux garder (2020) et (digital)

"this is a test (2020) (digital) (hoho-Empire)"
"this is a test (2020) (digital) (ho123-Empire)"
"this is a test (2020) (digital) (honianuhvdfuysdg-Empire)"


 un gentil powershelleur qui est à l'aise avec les Regex pour éclairer ma lanterne de noob en Regex?
 
Dernière édition: il y a 2 ans 9 mois par Guardiola gabriel.

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 9 mois - il y a 2 ans 9 mois #30907 par rhiwotar
Salut, je pense avoir trouver
"this is a test (2020) (digital) (hoho-Empire)" -replace "(\([[:alnum:]]+-Empire\))",""

Pour tester tes regex, je te conseille regex101.com/
Dernière édition: il y a 2 ans 9 mois par Arnaud Petitjean. Raison: Mise en forme du code en utilisant une balise code

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 9 mois #30908 par Arnaud Petitjean
Salut Rhiwotar !

Je pense que ta proposition ne marche pas malheureusement...
PS > "this is a test (2020) (digital) (hoho-Empire)" -match "(\(:alnum:+-Empire\))"

$false

En fait ce que veut Gabriel c'est supprimer complètement le dernier morceau de texte contenu entre parenthèses (ainsi que les parenthèses elles-mêmes). Du moins si j'ai bien compris sa demande...
Pas simple quand on n'est pas très expérimentés en RegEx... ;-)
 

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 9 mois #30909 par Arnaud Petitjean
Que diriez-vous de cela ?
"this is a test (2020) (digital) (hoho-Empire)" -replace '(.+\(.+\).+\(.+\)).+(\(.+\))','$1'

this is a test (2020) (digital)

Dans ma proposition il n'y a pas l'espace de fin ;-).

Qu'en pensez-vous ?

MVP PowerShell et créateur de ce magnifique forum :-)
Auteur de 6 livres PowerShell aux éditions ENI
Fondateur de la société Start-Scripting
Besoin d'une formation PowerShell ?

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 9 mois #30928 par Guardiola gabriel
 ouch a oui c'est de la regex là... 

mais c'est '$1' qui me rend perplexe tu remplaces le bloc trouvé par le premier groupe? (alors comme ca ca a l'air impressionant ce que j'ecris, mais meme moi je suis sûr d'avoir pas compris :) )

par contre la regex s'occupe que du dernier groupe de parenthèse donc l le bloc qui contient empire je ne m'en débarasses pas si un petit malin me le met au milieu
PS C:\>"this is a test (2020) (hoho-Empire) (digital)" -replace '(.+\(.+\).+\(.+\)).+(\(.+\))','$1'
this is a test (2020) (hoho-Empire)
PS C:\>"this is a test (2020) (digital) (hoho-Emppioire)" -replace '(.+\(.+\).+\(.+\)).+(\(.+\))','$1'
this is a test (2020) (digital)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 2 ans 9 mois #30929 par ericlm128
"this is a test (2020) (digital) (hoho-Empire)" -replace "\([^\(]*empire[^\)]*\)",""

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.080 secondes
Propulsé par Kunena