web-dev-qa-db-ja.com

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)です。結果を別の文字列に保存することは問題ありません。

26
resolver101

次の正規表現は、括弧の間のすべてを抽出します。

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

46
Shay Levy

プログラム名が常に()の最初のものであり、最後にあるもの以外の)を含まない場合、$yourstring -match "[(][^)]+[)]"がマッチングを行い、結果は$Matches[0]になります

15
jsvnm

非正規表現ソリューションを追加するには:

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

これは、括弧で文字列を分割し、プログラム名を含む配列から文字列を取得します。

括弧が必要ない場合は、次を使用します。

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

-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