• 締切済み

PowerShellの replace演算子で

PowerShellの replace演算子で、キャプチャーしたものと、変数をくっ付けた時、うまく表示できません。これはどうしたらよいのでしょう。 例 21AA-N1-M01.txt 21AB-N2-M02.txt などのファイルがあるとして、先頭から2文字と1番目のハイフンの隣の文字とNの隣の数字に1を加えたものと2番目のハイフン以降をくっ付ける。 21AA-N1-M01.txt → AAN2M01.txt dir *.txt | % {$a = [regex]::Matches($_.Name,'\d+') ; $b = 1 + $a.Value[1] ; $_.Name -replace '..(..)-N(\d)-(.*)',"`$1$b`$3"} $12M01.txt となってしまいます。 "`$1 $b`$3" という風に $1 と $b の間にスペースを入れるか、何か文字を入れると正常な表示にはなりますが、間に余計なものは入れたくないです。 $1 と $b の間に何かエスケープ文字とか入れるのでしょうか?

みんなの回答

  • n-jun
  • ベストアンサー率33% (959/2873)
回答No.1

全くの未経験者です。 期待外れかもですが。 $1 $3 は正規表現の置換の文字ですが、 $b は変数名ですよね? くっつけてしまうとどちらなのかと混乱しているのでは? でも対応策はわかりませんけど。

UY-Scuti
質問者

補足

ごめんなさい。 ここでは解決しそうになかったので、他のQ&Aサイトで訊きました。質問してから1時間もしないうちに解決しました。 これ、知恵袋と違って、質問、消せないのね。

関連するQ&A

  • preg_replaceにおけるeオプション

    文字列$strは、「aa:bb」という文字列を含み、$flagが1のときは、この部分を「aa」に。0のときは「bb」に置き換えるという処理で、 $str = preg_replace("/(.*):(.*)/e","($flag) ? $1 : $2", $str); とするも、うまくできません。 http://www.jp.u4ia.net/~tkyng/php/php_manual_i18n/function.preg-replace.html こちらのサイトの一番下にe修飾の使い方がのっているのですが、これを真似てもうまくいきません。 e修飾の使い方を教えてください。

    • ベストアンサー
    • PHP
  • SUBSTITUTE関数とREPLACE関数に関して

    こんにちは。 文字列と数字の間にハイフンを入れ、不要なゼロを消すことが できる関数を探しています。 例えば・・・ A1のセルに 【ABCD012345】 というデータが入っているとして、 最終的には 【ABCD-12345】 と表示させるようにしたいと考えています。 ABCDと数値の間にハイフンを入れ、数値の頭がゼロの場合は ゼロを削除して表示させるようにしたいのです。 今私がやっている方法は B1のセルに =REPLACE(A1,5,0,"-") と入れ、 ABCD-012345 と表示させ C1のセルに =SUBSTITUTE(B1,"-0","-") と入れ、不要なゼロをハイフンに置き換えて、 ABCD-12345 と2段階を経て表示させています。 これをもっと簡単にできる方法はありますでしょうか。 よろしくお願いいたします。

  • 【Java script】replaceの正規表現

    java scriptでreplaceを使って文字列の変換を行うことを考えています。 どのように書けばよいでしょうか、教えてください。 状況ですが、 文字列:「d(e)-4-yl」 を 文字列:「d-4-yl」 と変換します。 文字列は下記の通りです。   アルファベット (e) ハイフン 数字 ハイフン yl 例:   d   (e)  -    4   -   yl アルファベットと数字は様々な数字とアルファベットが入ります。 その他の例 「n(e)-2-yl」 → 「n-2-yl」 例えば下記は変換しません。 d(e)-4-wer、d(e)-4-cd、d(e) よろしくお願いします。

    • ベストアンサー
    • Java
  • ファイルの変換で文字化けを回避したい

    ファイル中の文字列を一部書き換える処理をしています。regEx.replaceを使って書き換えたところ、日本語が下記のように文字化けしてしまいます。 これを回避するためにどうしたら良いでしょうか? ○変換前:test1.txt <description>東京都</description> ○変換結果:test2.txt(文字化け) <description>譚ア莠ャ驛ス</description> ○スクリプト Set fso = CreateObject("Scripting.FileSystemObject") Set inFile = fso.OpenTextFile("c:\test1.txt") Set outFile = fso.CreateTextFile("c:\test2.txt") Set regEx = New RegExp regEx.pattern = "テスト" repStr = "てすと" Do Until inFile.AtEndOfStream tempLine = inFile.ReadLine repLine = regEx.Replace(tempLine, repStr) outFile.WriteLine repLine Loop inFile.Close outFile.Close

  • テキストファイル中の文字列を書き換えるスクリプトを書きたい

    テキストファイルの文字列を書き換えるスクリプトを考えています。 今、次のところまで出来るようになりました。本当は「こんにちは」の文字列を全て「HELLO」に置換したいのです。現在は一行の中で最初の「こんにちは」は置換されますが、2番目以降が置換されません。同じ行中の2番目以降も置換するには、どうしたら良いでしょうか? <置換前ファイル:sample.txtの中身> こんにちはこんにちはこんにちはこんにちは こんにちは こんにちは <置換前ファイル:sample.txtの中身> HELLOこんにちはこんにちはこんにちは HELLO HELLO <置換スクリプト> Set fso = CreateObject("Scripting.FileSystemObject") Set regEx = New RegExp Set inFile = fso.OpenTextFile("C:\static\sample.txt") Set outFile = fso.CreateTextFile("C:\static\sample1.txt") regEx.Pattern = "こんにちは" repStr = "HELLO" Do Until inFile.AtEndOfStream tempLine = inFile.ReadLine repLine = regEx.Replace(tempLine, repStr) outFile.WriteLine repLine Loop inFile.Close outFile.Close

  • C# String の中の\ をエスケープとして

    VisualStudio2010 C# でString 中の\ をエスケープシーケンスとして処理したいです。 String strText = this.textBox1.Text; String strPattern = this.textBox2.Text; String strReplaceText = this.textBox3.Text; strText = Regex.Replace(strText, @strPattern, strReplaceText, RegexOptions.Singleline); this.textBox3 に\r\n と入れて、Regex.Replace で改行として扱いたいんです。でも実際には\r\n は文字として扱われています。 コツを教えてください。

  • 自動で増えてくれるPHP

    以前に質問させて頂いた内容をもとに、以下のようなものを作成しました。 以前の質問 → http://okwave.jp/qa/q6858703.html 作成したもの ↓ 【Aサーバ】「a.txt」(データ用) $name01='一子'; $age01='11'; $name02='二郎'; $age02='22'; 【Bサーバ】「b.html」(表示用) <?php $data = file_get_contents ('http://www.A/a.txt'); foreach (explode("\n" , $data) as $value) { if (preg_match ("/\\$(.+)='(.+)'/", $value, $matches)) { $$matches[1] = $matches[2]; } } echo '<table>'; echo '<tr><th>'.$name01.'</th><td>'.$age01.'</td></tr>'; echo '<tr><th>'.$name02.'</th><td>'.$age02.'</td></tr>'; echo '</table>'; ?> ここで質問なのですが、↑のような仕組みで、a.txtの中身が $name03='三太'; $age03='33'; $name04='~~'; $age04='~~'; と増えていった場合、b.htmlの echo '<tr><th>'.$name~~.'</th><td>'.$age~~.'</td></tr>'; が自動的に増えてくれるようなものを作りたいと考えています。 配列(?)を使うという方法も調べてみたのですが、分からず……。 ご教示願います。

    • ベストアンサー
    • PHP
  • smartyの関数について

    smartyの関数について 例えば、あいうえお(かきくけこ)という文字列を変数にいれた場合、実際に表示するのは あいうえおだけ表示させるにはどうすればいいでしょうか? 具体的には(***)の括弧内の文字は括弧も含み削除して表示したいという事です。 変数には基本的に漢字が入ります。 {$name|regex_replace:"/[(.*)]/":""} 上記のように試してみたのですが括弧が消えるだけで括弧内の文字は表示されてしまいます。

    • ベストアンサー
    • PHP
  • 改行を含んだ文字列を正規表現で置換するには?

    正規表現で、改行を含んだ文字列を置換しようと思っています。 例えば下の「infile.txt」にある aaa bbb という(2行にわたる)文字列を zzz という文字列に変換させたい訳です。 試しに「test.vbs」のようなコードを書いてみましたが、これでは上手く行きませんでした。 上手く変換されるようにするには、どうしたら良いでしょうか? ----------------------------------------------------- ○「test.vbs」の内容 Set fso = CreateObject("Scripting.FileSystemObject") Set inFile = fso.OpenTextFile("C:\infile.txt") Set outFile = fso.CreateTextFile("C:\outfile.txt") Set regEx = New RegExp regEx.pattern = "aaa\nbbb" repStr = "zzz" Do Until inFile.AtEndOfStream tempLine = inFile.ReadLine repLine = regEx.Replace(tempLine, repStr) outFile.WriteLine repLine Loop inFile.Close outFile.Close ----------------------------------------------------- ○「C:\infile.txt」の内容 aaa bbb ccc

  • javascript「replace」について

    URLを取得した後、そのURLを置換したいのですが http://www.xxxxx.com/a=123456/b=12345678 ※「a=」、「m=」の後ろの数字は変化します というものを、 http://www.xxxxx.com/12345678/123456 「a=」、「b=」の数字部分のみ前後逆にして置換したいのですが やり方が分かりません。 どこかの掲示板で var aTag = document.getElementsByTagName('a'); var i = 0; for( i = 0; i < aTag.length; i++ ) { if( aTag[i].href.indexOf( '/www.xxxxx.com' ) > -1 ) { aTag[i].href = aTag[i].href.replace( '/www.xxxxx.com', '/www.xxxxx.jp' ); } if( aTag[i].href.indexOf( '/www.xxxxx.com' ) > -1 ) { aTag[i].href = aTag[i].href.replace( '/www.xxxxx.com', '/www.xxxxx.jp' ); } } とすればリンク先を取得して http://www.xxxxx.com を http://www.xxxxx.jp に置換できるというのは分かったのですが、 変動する数字も取得して、任意の文字列にというのができません。 matchやsliceなども試してみたのですが、 いかんせん初心者なため動作が理解できていません。 ご存知の方がいらっしゃいましたら、ご教示下さい。 よろしくお願いいたします。