web-dev-qa-db-ja.com

Notepad ++エキスパートの提案を見つけて置き換える

Notepad ++での検索と置換についてサポートが必要です。

例:

$ 250 'こんにちは1'テイク '____'

$ 500 'ハロー2'テイク '____'

$ 1000 'ハロー3'テイク '____'

'Hello9999'までのこれらのエントリが何千もあると想像してください。

「Hello1」または「Hello2」を変更せずに「____」を数字に置き換えたい。

結果は次のようになります。

$ 250 'ハロー1'テイク '250'

$ 500 'ハロー2'テイク '500'

$ 1000 'ハロー3'テイク '1000'

どうすればこれを行うことができますか?正規表現を使用することを期待します。

1
User162636

正規表現のチェックボックスをオンにして、次を使用します。

探す:

\$(.*?) (.*?) Take '(.*?)'

交換:

\$$1 $2 Take '$1'

これにより、基本的に次のような行が検索されます。

$anything anything Take 'anything'  

。*?正規表現の改行を除くすべての文字を意味します。
。*などのキャプチャグループを括弧で囲みますか?その内容を$ nの変数に格納します。ここで、nはn番目のグループです。

したがって、検索後、3つの変数があります。
$ 1 = 250 $ 2 = 'こんにちは1' $ 3 = ___

Replaceを使用して、実際の行全体を\ $に置き換えます(ドル記号をエスケープすると、変数ではなく文字の$になります)。
行全体が$$ 1 $ 2 '$ 1'に置き換えられます
ご覧のとおり、最初のキャプチャグループである$ 1変数を再度使用します。


私はSOについてはまったく新しいので、私の説明がそれほど良くない場合は申し訳ありません。

2
Greg01re

これは、[検索/置換]ダイアログの下部にある[正規表現]ラジオボタンを選択したNotepad ++構文である必要があります。

Find:  (\$(\d+).*Take\s+').*(')
Replace:  \1\2\3

説明:

括弧は、変数を左から右に数えて順番にグループ化します。

(\$(\d+).*Take\s+').*(')
|--------1--------|
   |-2-|             |3|

\ $:ドル記号を見つけることを意味します

\ d +:数字を検索することを意味し、末尾の「+」は1つ以上を意味します(つまり、少なくとも1桁である必要があります)。

。*: "。"は任意の文字を意味し、「*」は1つ以上の文字を意味します。

Take:は具体的にはWordテキストです。

\ s +:スペース文字を意味し、「+」は1つ以上を意味します。

.。

ここで、一重引用符の最後の文字を除いてすべてがグループ化されているため、次のようになります。

\1\2\3

最初と3番目の括弧を入れ、2番目の括弧を間に入れます(2番目の括弧はドルの値です)。

1
jehad

これを試して

最初に正規表現をオンにします

Notepad++ Settings to turn on Regular Expressions

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_

0
Wolfkin