Question
Extraction d'une partie d'une chaine (Résolu)
- Gérard Langlois
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 5
- Remerciements reçus 0
il y a 17 ans 3 mois #3313
par Gérard Langlois
Extraction d'une partie d'une chaine (Résolu) a été créé par Gérard Langlois
Voilà mon problème, j'ai la chaine de la forme suivante :
[code:1]$toto = \"TEMP = 10:11:12\"[/code:1]
Je voudrais en extraire \"10:11:12\". Je pensais utiliser une regexp et la notion de groupe.
Par exemple quelque chose du genre:
[code:1]
TEMP = \([0-9][0-9]:[0-9][0-9]:[0-9][0-9]\)[/code:1]
Je pourrai alors récupérer la partie qui match le groupe [code:1]
[0-9][0-9]:[0-9][0-9]:[0-9][0-9][/code:1]
Cependant je n'ai pas vu la notion de groupe dans les regexp powershell. Je me trompe ?
Je suis obligé de passer par la méthode Split?
Message édité par: Arnaud, à: 27/11/08 22:33<br><br>Message édité par: Arnaud, à: 9/12/08 23:24
[code:1]$toto = \"TEMP = 10:11:12\"[/code:1]
Je voudrais en extraire \"10:11:12\". Je pensais utiliser une regexp et la notion de groupe.
Par exemple quelque chose du genre:
[code:1]
TEMP = \([0-9][0-9]:[0-9][0-9]:[0-9][0-9]\)[/code:1]
Je pourrai alors récupérer la partie qui match le groupe [code:1]
[0-9][0-9]:[0-9][0-9]:[0-9][0-9][/code:1]
Cependant je n'ai pas vu la notion de groupe dans les regexp powershell. Je me trompe ?
Je suis obligé de passer par la méthode Split?
Message édité par: Arnaud, à: 27/11/08 22:33<br><br>Message édité par: Arnaud, à: 9/12/08 23:24
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 17 ans 3 mois #3316
par Laurent Dardenne
Tutoriels PowerShell
Réponse de Laurent Dardenne sur le sujet Re:extraction d'une partie d'une chaine
gla écrit:
Il encapsule la classe Regex ,
[code:1]
$toto = \"TEMP = 10:11:12\"
#3+1 groupes
$MatchTmp =[Regex]::Match($toto,'^TEMP = (\d{1,2}):«»(\d{1,2}):«»(\d{1,2})$')
if ($MatchTmp.Success -eq $true)
{
foreach ($S in $MatchTmp.groups)
{ $S.Value}
}
#1+1 groupes
if ($toto -match '^TEMP = (\d{1,2}:\d{1,2}:\d{1,2})$' )
{$matches}
#1+1 groupes nommés
if ($toto -match '^TEMP = (?<un>\d{1,2}):«»(?<deux>\d{1,2}):«»(?<trois>\d{1,2})$')
{$matches[\"un\"]
$matches[\"deux\"]
$matches[\"trois\"]}
[/code:1]
Recherche sur le forum tu y trouveras un post référençant qq articles sur le sujet des regex sous PS.
Oui et non, il faut regarder dans les possibilités de .NET. Bien qu'il existe l'opérateur Match et la variable automatique $Matches.Cependant je n'ai pas vu la notion de groupe dans les regexp powershell. Je me trompe ?
Il encapsule la classe Regex ,
[code:1]
$toto = \"TEMP = 10:11:12\"
#3+1 groupes
$MatchTmp =[Regex]::Match($toto,'^TEMP = (\d{1,2}):«»(\d{1,2}):«»(\d{1,2})$')
if ($MatchTmp.Success -eq $true)
{
foreach ($S in $MatchTmp.groups)
{ $S.Value}
}
#1+1 groupes
if ($toto -match '^TEMP = (\d{1,2}:\d{1,2}:\d{1,2})$' )
{$matches}
#1+1 groupes nommés
if ($toto -match '^TEMP = (?<un>\d{1,2}):«»(?<deux>\d{1,2}):«»(?<trois>\d{1,2})$')
{$matches[\"un\"]
$matches[\"deux\"]
$matches[\"trois\"]}
[/code:1]
Recherche sur le forum tu y trouveras un post référençant qq articles sur le sujet des regex sous PS.
Tutoriels PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Robin Lemesle
- Hors Ligne
- Modérateur
-
Réduire
Plus d'informations
- Messages : 260
- Remerciements reçus 0
il y a 17 ans 3 mois #3329
par Robin Lemesle
Robin MVP PowerShell
Réponse de Robin Lemesle sur le sujet Re:extraction d'une partie d'une chaine
Effectivement, powershell n'inclut pas de nouvelles regex. Comme le dit si bien laurent, il faut regarder du coté de .Net sur le web
lgmorand.developpez.com/dotnet/regex/
.
Robin MVP PowerShell
Connexion ou Créer un compte pour participer à la conversation.
- Arnaud Petitjean
-
- Hors Ligne
- Modérateur
-
il y a 17 ans 3 mois #3332
par Arnaud Petitjean
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 ?
Réponse de Arnaud Petitjean sur le sujet Re:extraction d'une partie d'une chaine
Salut !
Si le test du contenu de ta chaine n'est pas indispensable, le plus simple serait de faire un simple split, comme ceci :
[code:1]
PS > $toto = \"TEMP = 10:11:12\"
PS > $toto.split(' ')[2]
10:11:12
[/code:1]
@+
Arnaud
Si le test du contenu de ta chaine n'est pas indispensable, le plus simple serait de faire un simple split, comme ceci :
[code:1]
PS > $toto = \"TEMP = 10:11:12\"
PS > $toto.split(' ')[2]
10:11:12
[/code:1]
@+
Arnaud
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.
- Gérard Langlois
- Auteur du sujet
- Hors Ligne
- Nouveau membre
-
Réduire
Plus d'informations
- Messages : 5
- Remerciements reçus 0
il y a 17 ans 3 mois #3396
par Gérard Langlois
Réponse de Gérard Langlois sur le sujet Re:extraction d'une partie d'une chaine
Merci à tous pour votre aide.
J'avais contourné le problème en utilisant
[code:1]
$toto = \"TEMP = 10:11:12\"
$toto.Replace(\"TEMP = \",\"\"«»)
[/code:1]
Ce n'était pas très propre mais ça marchait.
Depuis l'aide de Laurent, j'utilise les regex. Cela permet de faire d'avantage de contrôles
Merci
J'avais contourné le problème en utilisant
[code:1]
$toto = \"TEMP = 10:11:12\"
$toto.Replace(\"TEMP = \",\"\"«»)
[/code:1]
Ce n'était pas très propre mais ça marchait.
Depuis l'aide de Laurent, j'utilise les regex. Cela permet de faire d'avantage de contrôles
Merci
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.069 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- Extraction d'une partie d'une chaine (Résolu)