web-dev-qa-db-fra.com

Powershell: extraire le texte d'une chaîne

Comment extraire le "nom du programme" d'une chaîne. La chaîne ressemblera à ceci:

% 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%

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.

26
resolver101

L'expression régulière suivante extrait n'importe quoi 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érifiez 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

46
Shay Levy

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

15
jsvnm

Juste pour ajouter une solution non regex:

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

Cela fractionne la chaîne entre parenthèses et prend la chaîne du tableau avec le nom du programme.

Si vous n'avez pas besoin des parenthèses, utilisez simplement:

$myString.Split('()')[1]
5
Rynant

Utilisation de -replace

 $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}\((.+?)\).+$','$1'
 $program

SUB RAD MSD 50R III
1
mjolinor