
Notepad++ の検索と置換について助けが必要です。
例:
250ドル「Hello 1」テイク「____」
500 ドルの「Hello 2」テイク「____」
1000ドルの「Hello 3」テイク「____」
「Hello 9999」までこのようなエントリが何千もあると想像してください。
「Hello 1」や「Hello 2」を変更せずに、「____」を数字に置き換えたいです。
次のような結果になることを望みます:
250ドル「Hello 1」テイク「250」
500ドル「Hello 2」500ドルを受け取る
1000ドル「Hello 3」テイク「1000」
これをどうやって実行すればいいのでしょうか? 正規表現を使用する必要があると思います。
答え1
正規表現のチェックボックスをオンにして、以下を使用します。
検索:
\$(.*?) (.*?) Take '(.*?)'
交換する:
\$$1 $2 Take '$1'
これは基本的に次のような行を検索します。
$anything anything Take 'anything'
.*? は、正規表現内の改行以外の任意の
文字を意味します。.*? などのキャプチャ グループを括弧で囲むと、その内容が変数 $n に格納されます。ここで、n は n 番目のグループです。
検索後、3つの変数が得られます:
$1 = 250 $2 = 'Hello 1' $3 = ___
置換では、実際の行全体を \$ に置き換えます (ドル記号をエスケープすると、変数ではなくリテラル $ になります)。
行全体が $$1 $2 '$1' に置き換えられます。
ご覧のとおり、最初のキャプチャ グループである $1 変数を再び使用します。
私は SO にかなり慣れていないので、説明があまり良くなかったらごめんなさい。
答え2
これは、検索/置換ダイアログの下部にある「正規表現」ラジオ ボタンを選択した場合の Notepad++ 構文になります。
Find: (\$(\d+).*Take\s+').*(')
Replace: \1\2\3
説明:
括弧は、左から右に数えて順番に変数をグループ化します。
(\$(\d+).*Take\s+').*(')
|--------1--------|
|-2-| |3|
\$ : ドル記号の検索を意味します
\d+ : 数字の検索を意味し、末尾の「+」は 1 つ以上の数字を意味します (つまり、少なくとも 1 つの数字である必要があります)。
.* : 「.」は任意の文字を意味し、「*」は 1 つ以上の文字を意味します。
: は具体的には Text という単語です。
\s+ : はスペース文字を意味し、「+」は 1 つ以上のスペース文字を意味します。
...
ここで、単一引用符内の最後の文字を除いてすべてがグループ化されているので、次のようになります。
\1\2\3
最初の括弧と 3 番目の括弧を配置し、その間に 2 番目の括弧を配置します (2 番目の括弧はドルの値です)。
答え3
これを試して
まず正規表現をオンにします
https://regex101.com/r/aW4gG2/2
検索:(\$\d+)(.*Take ')(.*)(')
置換:\1\2\1\4
捕獲
この表現には4つのグループがある
入力:$250 'Hello 1' Take '____'
グループ1
(\$d+)
= $250
- これは$(リテラルにエスケープ)で始まり、数字(\d
)1以上なので、3でも15でも最後の数字で止まります。あなたの例では、それらは行の先頭にありました。しかし、私はそうは思いません。しかし、それらが行の先頭にある場合は、^
それを作るために追加する必要があるかもしれません。^(\Sd+)
グループ2
(.*Take ')
= 'Hello 1' Take '
- 式は、.*
任意の文字を任意の回数だけ意味することを述べています。そのため、それが見つかるまですべてを取得しTake
、次に、Take '
私が書いたものを取得してそこで停止します。
グループ3
(.*)
= -____
これは基本的に内部スペースを取ります。基本的に0回以上取ります。この場合はすべてアンダースコアですが、書かれていると、そこにあるものすべてを取得します。行の終わりまですべてを取得しますが、その後に停止するタイミングを指示するものが続きます。
グループ4
(')
= -'
これはグループ 3 に'
マークで停止するように指示します。また、'
再配置のために独自のグループ内のマークもキャプチャします。
代替
\1\2\1\4
グループは開き括弧から番号が付けられますが、この場合はすべてがネストのない線形なので、かなり明白です。\1\2\3\4
すべてをそのままにします。 しかし、3 番目のグループを最初のグループに置き換えたいので、...\1\2\1\4
がうまくいきます。 ここでの重要なポイントの 1 つは、最後に置き換えるために 4 番目のグループを確実にキャプチャしたことです。 それ以外はそれほど難しいことはありません。
実行
したがって、検索置換でそれを設定して、「すべて置換」をクリックすると、問題は解決するはずです。
編集
置換後の $ を削除したいとのことだったので、私の最初の提案に若干の変更を加える必要がありますが、基本的には同じです。
入力:$250 'Hello 1' Take '____'
検索:(\$)(\d+)(.*Take ')(.*)(')
置換:\1\2\3\2\5