如何从一个字符串中提取“程序名称”。该字符串将如下所示:
% 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 %
程序名称是(SUB RAD MSD 50R III)。将结果存储到另一个字符串中即可。我正在学习PowerShell,因此您的答案解释将受到赞赏。
如何从一个字符串中提取“程序名称”。该字符串将如下所示:
% 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 %
程序名称是(SUB RAD MSD 50R III)。将结果存储到另一个字符串中即可。我正在学习PowerShell,因此您的答案解释将受到赞赏。
下面的正则表达式可以提取括号中的任何内容:
PS> $prog = [regex]::match($s,'\(([^\)]+)\)').Groups[1].Value
PS> $prog
SUB RAD MSD 50R III
解释(使用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 «\)»
进一步阅读:
$yourstring -match "[(][^)]+[)]"
可以进行匹配,结果将在$Matches[0]
中。-match
返回一个布尔值,因此您可能想要在表达式上下文中使用类似于if($something -match "regexp") { $Matches[0] } else { '' }
的语句。 - Nickolay只是为了添加一个非正则表达式的解决方案:
'(' + $myString.Split('()')[1] + ')'
这会将字符串在括号处分隔,并从包含程序名称的数组中取出该字符串。
如果不需要括号,只需使用:
$myString.Split('()')[1]
$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