捕獲

捕獲

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

これを試して

まず正規表現をオンにします

Notepad++ 正規表現を有効にする設定

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

関連情報