2017-08-31 5 views
3

以下のコードを使用してテキストドキュメントを解析すると、 '333'のすべてのインスタンスが一致しますが、以下の3つの例のみを変更します。PowerShells regexを使用して複数のバリアントを解析し置換する

(Get-Content input.json) | ForEach-Object { 
    $_ -replace '333', '666' 
} | Set-Content output.json 

これは変更する必要があります

  • "se333" → "se666"
  • "SE333" → "SE666"
  • "333" → "666"

をこれは変更しないでください:

  • "1212333"
  • →変わらず "3331212"
  • →変わらない
  • "333asda" →変わらない "asd333" →変わらない

このためPowerShellの正規表現のソリューションとは何ですか?大文字小文字を区別しない修飾子

  • (?<=\b(?:se)?) - -

  • +1

    '' "se333" 'と' "asd333" とは何が異なるのですか?ここのルールは何ですか?私は '(?<!\ P {L})333 \ b'が動作する(文字で始まるか、文字列の先頭にある' 333 'にマッチする)、単語境界に続いて ' asd333'。 –

    +0

    "se333"はIDなので、 "se"はキーの一部です。asdは他の文字を表すはずです。良い質問! –

    +0

    'se'は静かな部分であり、neveryが変わることを意味しますか?次に、 '(?i)(?<= \ bse | ^)333 \ b'または' '(?i)(?<= \ b(?:se)?)333 \ b'](http:// regexstorm.net/tester?p=%28%3fi%29%28%3f%3c%3d%5cb%28%3f%3ase%29%3f%29333%5cb&i=se333%0d%0aSE333%0d%0a333%0d %0aこの+は+ + +左+変化してはならない%0d%0a%0d%0a%221212333%22 + - %3e +変化なし%0d%0a%223331212%22+%3e +変化なし%0d%0a%22333asda%22 + - %3e +不変%0d%0a%22asd333%22 + - %3e +不変およびo = m)。または、2つのASCII文字が必要な場合は '(?i)(?<= \ b(?:[az] {2})?)333 \ b' –

    答えて

    4

    あなたはregex demo

    詳細

    • (?i)を参照してください

      (?i)(?<=\b(?:se)?)333\b 
      

      使用することができます333前に、単語の境界とanopがなければなりませんTIONAL substrin se

    • 333 - リテラルストリング
    • \b - 末尾のワード境界。

    PowerShellのテスト:

    PS> $s = "se333 SE333 333 1212333 3331212 333asda asd333" 
    PS> $s -replace '(?i)(?<=\b(?:se)?)333\b', '666' 
    se666 SE666 666 1212333 3331212 333asda asd333 
    
    関連する問題