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, поэтому любые объяснения ваших ответов будут оценены.

 resolver10103 февр. 2012 г., 12:19
Есть несколько строк с "()" в других файлах, с которыми я работаю. Программа мне нужна в первых скобках. В первой строке шаблон представляет собой «%», вторая строка начинается с «O», а затем четырехзначное число «????» и тогда программа в скобках сразу после. Надеюсь, это поможет ребятам
 Andrey Marchuk02 февр. 2012 г., 14:37
Имя программы всегда будет в (), или оно всегда будет начинаться с 7-го символа?

Ответы на вопрос(4)

Решение Вопроса

ами:

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 «\)»

Проверьте эти ссылки:

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

 Shay Levy03 февр. 2012 г., 12:24
Я обновил свой ответ, добавил объяснение рекс и несколько ссылок
 KERR19 февр. 2019 г., 00:05
К сожалению, ссылки powershell.com все мертвы ...
 resolver10103 февр. 2012 г., 11:59
Спасибо за Ваш ответ. Можете ли вы объяснить и разбить это или как я могу узнать о регулярных выражениях? Любые рекомендованные хорошие сайты.

Просто чтобы добавить решение без регулярных выражений:

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

Это разбивает строку в скобках и берет строку из массива с именем программы в нем.

Если вам не нужны скобки, просто используйте:

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

Использование -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
 mjolinor05 февр. 2012 г., 01:34
регулярное выражение с учетом новых требований
 resolver10103 февр. 2012 г., 12:02
Есть несколько строк с "()". Шаблон

кроме того, что указано в конце, то$yourstring -match "[(][^)]+[)]" сопоставление, результат будет в$Matches[0]

Ваш ответ на вопрос