1

いくつかのファイルで次のタイプの文字列を置き換えようとしています:

StringResourceHelper.[STRING_OF_INTEREST]ResourceString() with Strings.[STRING_OF_INTEREST]

たとえば、次のように置き換えます。

StringResourceHelper.HelpResourceString()Strings.Help

これまでのところ、2 番目の文字列が重要でない場合に機能する単純な置換を得ました。

    Get-ChildItem . *.cs -Recurse |
      Foreach-Object {
       $c = ($_ | Get-Content) 
       $c = $c -replace 'StringResourceHelper.','Strings.'
       $c | Set-Content $_.FullName -Encoding UTF8
    }

しかし、触れてはならないStringResourceHelper.Cultureのような文字列もあるため、これは役に立ちません。

どんな助けでも大歓迎です。

4

1 に答える 1

1

正規表現でリテラル ドットをエスケープする必要があります。エスケープしないと、.改行以外の任意の文字と一致します。このようなものが動作するはずです:

$c = $c -replace 'StringResourceHelper\.(\w*?)ResourceString\(\)', 'Strings.$1'

また、次のように、コードを少し単純化することもできます。

$srch = 'StringResourceHelper\.(\w*?)ResourceString\(\)'
$repl = 'Strings.$1'

Get-ChildItem . *.cs -Recurse | % {
   $filename = $_.FullName
   (Get-Content $filename) -replace $srch, $repl |
       Set-Content $filename -Encoding UTF8
}
于 2013-08-19T13:28:39.987 に答える