Question
Expression régulière -_-'
- Sheyks
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 16
- Remerciements reçus 0
il y a 11 ans 9 mois #17583
par Sheyks
Expression régulière -_-' a été créé par Sheyks
Bonjour, j'avait récemment besoin de remplacer des caractères \"non-voulut\" par d'autres caractères.
J'ai d'abord pensé à ça :
[code:1] $photographe=Read-Host \"Indiquer le nom du photographe (laisser vide si non voulut) \"
if ($photographe -like \" \"«»){$photographe = (\"\"«»)}
if ($photographe -like \"*é*\"«»){$photographe = ($photographe -replace \"é\",\"e\"«»)}
if ($photographe -like \"*è*\"«»){$photographe = ($photographe -replace \"è\",\"e\"«»)}
if ($photographe -like \"*ê*\"«»){$photographe = ($photographe -replace \"ê\",\"e\"«»)}
if ($photographe -like \"*à*\"«»){$photographe = ($photographe -replace \"à\",\"a\"«»)}
if ($photographe -like \"*ô*\"«»){$photographe = ($photographe -replace \"ô\",\"o\"«»)}
if ($photographe -like \"* *\"«»){$photographe = ($photographe -replace \" \",\"_\"«»)}
elseif ($photographe -like \"\"«»){$photographe = (\"\"«»)}
else {$photographe = \"$photographe\"+\"~\"}[/code:1]
Mais, bien que cela fonctionne très bien c'est long à écrire et ça prend de la place...
j'ai donc un peut chercher sur internet pour trouver les \"expressions régulières\" (que je ne connaissais pas, comme le Regex que je connais que de nom).
j'en viens donc à un code plus épuré et claire :
[code:1]$expression = \"^[a-zA-Z]+(([\ \ ][a-zA-Z ])?[a-zA-Z]*)*$\"
$nomreplace = ($nomsaisie.replace('é','e').replace('è','e').replace('à','a').replace('','').replace('','').replace('','').replace('','').replace('','').replace('',''))
$Nomsaisie = \"Jéàn frànècois\"
if ($nomsaisie -notmatch $expression){$nomsaisie = \"$nomreplace\"}
if ($nomsaisie -like \"* *\"«»){$nomsaisie = ($nomsaisie -replace \" \",\"_\"«»)}
write $nomsaisie[/code:1]
Le code fonction lui aussi très bien, mais je trouve la partie avec mes \".replace\" trop long (surtout que j'ai pas fini de rentré toute les valeurs ^^)
J’aimerais donc savoir si, à l'image de ma première variable \"$expression\" il y'a une syntaxe de se genre en utilisant ces obscures expression régulière
.
J'ai d'abord pensé à ça :
[code:1] $photographe=Read-Host \"Indiquer le nom du photographe (laisser vide si non voulut) \"
if ($photographe -like \" \"«»){$photographe = (\"\"«»)}
if ($photographe -like \"*é*\"«»){$photographe = ($photographe -replace \"é\",\"e\"«»)}
if ($photographe -like \"*è*\"«»){$photographe = ($photographe -replace \"è\",\"e\"«»)}
if ($photographe -like \"*ê*\"«»){$photographe = ($photographe -replace \"ê\",\"e\"«»)}
if ($photographe -like \"*à*\"«»){$photographe = ($photographe -replace \"à\",\"a\"«»)}
if ($photographe -like \"*ô*\"«»){$photographe = ($photographe -replace \"ô\",\"o\"«»)}
if ($photographe -like \"* *\"«»){$photographe = ($photographe -replace \" \",\"_\"«»)}
elseif ($photographe -like \"\"«»){$photographe = (\"\"«»)}
else {$photographe = \"$photographe\"+\"~\"}[/code:1]
Mais, bien que cela fonctionne très bien c'est long à écrire et ça prend de la place...
j'ai donc un peut chercher sur internet pour trouver les \"expressions régulières\" (que je ne connaissais pas, comme le Regex que je connais que de nom).
j'en viens donc à un code plus épuré et claire :
[code:1]$expression = \"^[a-zA-Z]+(([\ \ ][a-zA-Z ])?[a-zA-Z]*)*$\"
$nomreplace = ($nomsaisie.replace('é','e').replace('è','e').replace('à','a').replace('','').replace('','').replace('','').replace('','').replace('','').replace('',''))
$Nomsaisie = \"Jéàn frànècois\"
if ($nomsaisie -notmatch $expression){$nomsaisie = \"$nomreplace\"}
if ($nomsaisie -like \"* *\"«»){$nomsaisie = ($nomsaisie -replace \" \",\"_\"«»)}
write $nomsaisie[/code:1]
Le code fonction lui aussi très bien, mais je trouve la partie avec mes \".replace\" trop long (surtout que j'ai pas fini de rentré toute les valeurs ^^)
J’aimerais donc savoir si, à l'image de ma première variable \"$expression\" il y'a une syntaxe de se genre en utilisant ces obscures expression régulière
Connexion ou Créer un compte pour participer à la conversation.
- Laurent Dardenne
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 6311
- Remerciements reçus 68
il y a 11 ans 9 mois #17585
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:Expression régulière -_-'
Salut,
tu peux utiliser ce type de construction :
[code:1]
$Nomsaisie = \"Jéàn frànècois\"
$sb={
switch ($args[0].Groups[0].Value) {
\"é\" {\"e\"; break}
\"è\" {\"e\"; break} # a regrouper en un seul test
\"à\" {\"a\"; break}
#etc
}#switch
}
[Regex]::Replace($nomsaisie, 'é|è|à|î|ï|ô|ù', $sb)
[/code:1]
Tu peux aussi rechercher Remove-Diacritic sur le forum.
tu peux utiliser ce type de construction :
[code:1]
$Nomsaisie = \"Jéàn frànècois\"
$sb={
switch ($args[0].Groups[0].Value) {
\"é\" {\"e\"; break}
\"è\" {\"e\"; break} # a regrouper en un seul test
\"à\" {\"a\"; break}
#etc
}#switch
}
[Regex]::Replace($nomsaisie, 'é|è|à|î|ï|ô|ù', $sb)
[/code:1]
Tu peux aussi rechercher Remove-Diacritic sur le forum.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Sheyks
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 16
- Remerciements reçus 0
il y a 11 ans 9 mois #17602
par Sheyks
Réponse de Sheyks sur le sujet Re:Expression régulière -_-'
Salut, merci pour les pistes notamment la recherche de Remove-Diacritic qui ma renvoyer sur l'une de tes réponse ou tu donne un lien vers des info liée au expression régulière
Connexion ou Créer un compte pour participer à la conversation.
- Sheyks
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 16
- Remerciements reçus 0
il y a 11 ans 9 mois #17624
par Sheyks
Réponse de Sheyks sur le sujet Re:Expression régulière
Bonjour, petit up pour un problème que je pense simple, mais auquel je ne trouve pas de solution 
Tout d'abord voici le code
[code:1]#chemin d'accès de 260 caractères c:\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\
$chemin = Read-Host \"Entrer le chemin d'accès\"
if ($chemin -match \"^\w.{253,}$\"«»){$chemin = \"Erreur chemin d'accès trop long\"}
if ($chemin -notmatch \"^\w.{253,}$\"«»){$chemin = \"ok!\"}
else {$chemin = \"invalide\"}
write $chemin[/code:1]
Mon but est de vérifier si le chemin d'accès ne comporte pas plus de 253 caractères.
Mon problème c'est que si je met mon if '-notmatch' en commentaire mon if '-match' fonctionne avec un long chemin de + de 253 caractère et si il est plus court il renvoie bien sur invalide, mais lors ce que j'enlève le # du commentaire mon '-notmatch' passe en priorité et peut importe se que je rentre il écrie \"ok!\"
j'ai aussi essayer :
[code:1]if ($chemin -match \"^\w.{1,252}$\"«»){$chemin = \"ok!\"}[/code:1]
Mais rien n'y fait
je voie pourtant pas ou est-ce que j'ai fait une erreur de syntaxe ou alors il y a un truck qui m’échappe
Tout d'abord voici le code
[code:1]#chemin d'accès de 260 caractères c:\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\abc\
$chemin = Read-Host \"Entrer le chemin d'accès\"
if ($chemin -match \"^\w.{253,}$\"«»){$chemin = \"Erreur chemin d'accès trop long\"}
if ($chemin -notmatch \"^\w.{253,}$\"«»){$chemin = \"ok!\"}
else {$chemin = \"invalide\"}
write $chemin[/code:1]
Mon but est de vérifier si le chemin d'accès ne comporte pas plus de 253 caractères.
Mon problème c'est que si je met mon if '-notmatch' en commentaire mon if '-match' fonctionne avec un long chemin de + de 253 caractère et si il est plus court il renvoie bien sur invalide, mais lors ce que j'enlève le # du commentaire mon '-notmatch' passe en priorité et peut importe se que je rentre il écrie \"ok!\"
j'ai aussi essayer :
[code:1]if ($chemin -match \"^\w.{1,252}$\"«»){$chemin = \"ok!\"}[/code:1]
Mais rien n'y fait
Connexion ou Créer un compte pour participer à la conversation.
- ANTRI Mohamed
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 124
- Remerciements reçus 0
il y a 11 ans 9 mois #17625
par ANTRI Mohamed
Réponse de ANTRI Mohamed sur le sujet Re:Expression régulière
Hello,
tu peux faire comme cela :
[code:1]
$chaine = \"C:\Utilisateurs\outlook\\"
if ($chaine.length -lt 253) #inférieur ou égale
{
write-host \"La chaîne fait moins de 253 caractères\" -foregroundcolor green
}
else
{
write-host \"La chaîne fait plus de 253 caractères\" -foregroundcolor red
}
[/code:1]
tu peux faire comme cela :
[code:1]
$chaine = \"C:\Utilisateurs\outlook\\"
if ($chaine.length -lt 253) #inférieur ou égale
{
write-host \"La chaîne fait moins de 253 caractères\" -foregroundcolor green
}
else
{
write-host \"La chaîne fait plus de 253 caractères\" -foregroundcolor red
}
[/code:1]
Connexion ou Créer un compte pour participer à la conversation.
- Sheyks
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 16
- Remerciements reçus 0
il y a 11 ans 9 mois #17626
par Sheyks
Réponse de Sheyks sur le sujet Re:Expression régulière
Merci, à force de me forcer à utiliser les expression régulière j'en oublier les bases ^^, mais je me force un peut à les utiliser pour mieux les comprendre. Par curiosité aurait-tu une solution avec des expression régulière?
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.050 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Expression régulière -_-'