0

私はたくさんの資料を読んでいて、解決策を見つけたと思っていましたが、うまくいきませんでした。名前に含まれるアポストロフィを見つけて、ダブルに置き換える必要があります。ファイルを配列にロードし、それをループしてアポストロフィを探しています。問題は、各行に複数のアポストロフィを含めることができるため、単純な検索と置換ではないことです。

ファイルのサンプルを次に示します。

   create(xxxxxxx)using(xxxxxxx)name('O'Doe, John')
   replace(xxxxxxx)instdata('ab 1234 ')
   create(xxxxxxx)using(xxxxxxx)name('Doe, O'Jane')
   replace(xxxxxxx)instdata('ab 5678 ')

間に他の行がありますが、アポストロフィは含まれていません。

これが私がこれまでに持っているものです:

    $Pattern = "[A-Z]'[A-Z]"
    $user = gc C:\Temp\mfnewuser.ins
    for ($i = 0; $i -lt $user.count; $i++) {
       if ($user[$i] -match $Pattern) {
       $user[$i] = [regex]::replace($strText, $Pattern.substring(2,1), "''")
       $user | out-file C:\Temp\mfnewuser.ins
       }
    }

大文字の後にアポストロフィが続き、別の大文字が続くものを探しています。他のコンマがあるため、グローバルな置換だけを行うことはできません。パターン マッチングが機能していることはわかっていますが、部分文字列でそれを操作できないようです。部分文字列は $Pattern を正規表現の結果ではなく文字列として認識します。正規表現の結果を変数に保存できれば、それは素晴らしいことです。それなら交換は楽だと思います。

これも試しましたが、運もありません:

    $Pattern = "[A-Z]'[A-Z]"
    $NewPattern = "[A-Z]''[A-Z]"
    $f = Get-Content C:\Temp\mfnewuser.ins
    $f = $f -replace $Pattern, $NewPattern
    $f | out-file C:\Temp\mfnewuser.ins

私はこれに完全に間違って近づいている可能性があり、もっと簡単な方法がありますが、まだ何も見ていません。

編集: 以下の Bill_Stewarts の例に基づいて、私はこれを姓ではなく姓で動作させるようにしました:

$Pattern = "[A-Z]'[A-Z]"
$user = gc C:\Temp\mfnewuser.ins
for ($i = 0; $i -lt $user.count; $i++) {
    if ($user[$i] -match $Pattern) {
        $user[$i] = $user[$i] -replace "(.*[A-Z])'([A-Z]+.*)", "`$1''`$2"
        $user | out-file C:\Temp\mfnewuser.ins
        }
    }
4

2 に答える 2

1

おそらくこのようなものですか?

get-content "test.txt" | foreach-object {
  $_ -replace "([A-Z])'([A-Z])", "`$1''`$2"
}

正規表現は ( ) を使用してグループ化でき、-replace 演算子は部分文字列の置換 ($1 および $2) をサポートしています。

于 2013-10-04T18:23:43.203 に答える
1

行を次のように置き換えます。

$user[$i] = $user[$i] -replace "([A-Z])'([A-Z])", "`$1`''`$2"

または、次のいずれかを試してください。これで十分です。

get-content "mfnewuser.ins" | foreach-object {
  $_ -replace "([A-Z])'([A-Z])", "`$1`''`$2"
} | set-content "mfnewuser.ins"

...

get-content "mfnewuser.ins" | foreach-object {
  $_ -replace "([a-zA-Z', ]+)'([a-zA-Z', ]+)", "`$1`''`$2"
} | set-content "mfnewuser.ins"
于 2013-10-04T18:50:45.590 に答える