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