質問

次の形式の正規表現に一致するファイル内のテキストを検索したい t[A-Z]あなた (つまり、一致 t その後に大文字と別の一致が続きます あなた, 、大文字が小文字になるように、一致したテキストを変換します。たとえば、正規表現の場合、 x[A-Z]y

xAy

になる

xay

そして

xZy

になる

xzy

Emacsの query-replace この関数では逆参照が可能ですが、私の知る限り、一致したテキストの変換はできません。これを行う組み込み関数はありますか?誰かが私が使用できる短い Elisp 関数を持っていますか?

アップデート

@Marcel Levy は次のように述べています。 \, 置換式では、(任意の?) Elisp 式が導入されます。たとえば、上記の解決策は次のようになります

M-x replace-regexp <RET> x\([A-Z]\)z <RET> x\,(downcase \1)z
役に立ちましたか?

解決

のように見えます スティーブ・イエッグ 実はこれに対する答えはすでに数年前に投稿されています。 「ピカピカで新しい:Emacs 22」 「置換文字列の大文字と小文字の変更」まで下にスクロールすると、 replace-regexp 関数。

一般的な答えは、次のように、置換文字列の一部として任意の Lisp 式を呼び出すには、「\,」を使用するということです。 \,(capitalize \1). 。ヘルプ テキストを読むと、対話モードのみのように見えますが、これが最も必要な場所の 1 つのようです。

他のヒント

この場合の qrr の代替手段は、マクロを記録して再生することです。(isearch-forward-regexp、文字を選択、downcase-region。) 正規表現が間違っている場合はすぐにフィードバックが得られるので、オンザフライ マクロの方が簡単だと思います。

これをマクロで行うこともありますが、正規表現の置換文字列内からコードを実行するのは私にとって非常に直感的ではないためです。バッチ スクリプトや、非常に高速に処理する必要があるものを作成している場合は、確かに \ が最適です。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top