Powershell: extrait du texte d'une chaîne de caractères

comment extraire le "nom du programme" d'une chaîne de caractères. La chaîne va ressembler à ceci :

% O0033 (SUB RAD MSD 50R III) G91G1X-6.4 Z-2.F500 G3I6.4Z-8. G3I6.4 G3R3.2X6.4F500 G91G0Z5. G91G1X-10.4 G3I10.4 G3R5.2X10.4 G90G0Z2. M99%

le nom du programme est (SUB RAD MSD 50R III). Stocker le résultat dans une autre chaîne est très bien. J'apprends powershell, donc toute explication de vos réponses sera appréciée.

24
demandé sur Kiquenet 2012-02-02 17:33:34

4 réponses

Les regex extraire quoi que ce soit entre les parenthèses:

PS> $prog = [regex]::match($s,'\(([^\)]+)\)').Groups[1].Value
PS> $prog
SUB RAD MSD 50R III


Explanation (created with RegexBuddy)

Match the character '(' literally «\(»
Match the regular expression below and capture its match into backreference number 1 «([^\)]+)»
   Match any character that is NOT a ) character «[^\)]+»
      Between one and unlimited times, as many times as possible, giving back as needed (greedy) «+»
Match the character ')' literally «\)»

Vérifier ces liens:

http://www.regular-expressions.info

http://powershell.com/cs/blogs/tobias/archive/2011/10/27/regular-expressions-are-your-friend-part-1.aspx

http://powershell.com/cs/blogs/tobias/archive/2011/12/02/regular-expressions-are-your-friend-part-2.aspx

http://powershell.com/cs/blogs/tobias/archive/2011/12/02/regular-expressions-are-your-friend-part-3.aspx

41
répondu Shay Levy 2017-07-21 15:13:29

si le nom du programme est toujours la première chose dans (), et ne contient pas d'autres) s que celui à la fin, alors $yourstring -match "[(][^)]+[)]" le correspondant, le résultat sera dans $Matches[0]

15
répondu jsvnm 2012-02-02 13:50:04

Juste pour ajouter un non-regex solution:

'(' + $myString.Split('()')[1] + ')'

cela divise la chaîne de caractères entre les parenthèses et prend la chaîne du tableau avec le nom du programme.

$myString.Split('()')[1]
5
répondu Rynant 2012-02-02 15:27:42

utiliser-remplacer

 $string = '% O0033(SUB RAD MSD 50R III) G91G1X-6.4Z-2.F500 G3I6.4Z-8.G3I6.4 G3R3.2X6.4F500 G91G0Z5. G91G1X-10.4 G3I10.4 G3R5.2X10.4 G90G0Z2. M99 %'
 $program = $string -replace '^%\sO\d{4}\((.+?)\).+$',''
 $program

SUB RAD MSD 50R III
1
répondu mjolinor 2012-02-05 00:33:52