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.
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:
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]
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]
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