1

我试图在几个文件中替换以下类型的字符串:

StringResourceHelper.[STRING_OF_INTEREST]ResourceString()字符串。[STRING_OF_INTEREST]

例如我想替换:

StringResourceHelper.HelpResourceString()Strings.Help

到目前为止,如果第二个字符串不重要,我得到了一个简单的替换:

    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 回答