私は以下のような行があります。括弧内の文字列を二重引用符で囲みます
fullname =(これはテスト名です)。
"("と ")"内のすべての文字列を二重引用符で囲みたいとします。
すなわちfullname =( "this"は "a" "test" "name")です。
誰かがそれを行うために私にvimの正規表現を与えることはできますか?
私は以下のような行があります。括弧内の文字列を二重引用符で囲みます
fullname =(これはテスト名です)。
"("と ")"内のすべての文字列を二重引用符で囲みたいとします。
すなわちfullname =( "this"は "a" "test" "name")です。
誰かがそれを行うために私にvimの正規表現を与えることはできますか?
これはそれをしない:
:%s/\v(\(.*)@<=[[:alnum:]]+(.*\))@=/"&"/g
は、入力が不正な形式であれば正規表現で(例えば括弧内)ネストされたパターンにマッチすることは間違って行くことに注意してください。上の例ではネストされた括弧はまったく扱われず、引用された括弧やエスケープされた括弧も壊れてしまいます。取り扱い注意。
次のように読み取ります
:%s substitute on all lines / matching \v (with "very magic" switched on) (\(.*)@<= a position that follows an opening paren, on this line [[:alnum:]]+ a series of alphanumeric characters (i.e. "words") (.*\))@= that are followed by a closing paren, on this line / replace with "&" the match, in quotes /g globally
Vimが実際に可変長ルックビハインドをサポートしていないことは注目に値する事実です。ほとんどの現代正規表現の実装はそうではありません。
このコマンドは、スペースではないすべてのものを置き、タブ、引用符に記号、括弧やセミコロンに等しい:
:s/[^ \t=();][^ \t=();]*/"&"/g
これは、同様fullname
を引用していますが、手動でそれらの引用符を削除することができますので、予めご了承ください。
自動化が遅いため、作業の一部を手動で行う価値があります。
次のコマンドを実行します。
:help substi
のvimで正規表現の置換についてのヘルプを表示するために。
次のように私はこれを行うだろう:
:s/\<\w\+\>/"&"/gc
により、各交換のために要求されます確認スイッチ「C」へ。 'fullname'と残りの行の 'a'(all)の置換には 'n'(no)と答えます。
この回答は実際に問題を解決するものではありません。それは "すべての言葉を引用する"部分をしますが、 "内かっこのみ"の部分を完全に忘れてしまいます。 – Tomalak
非常に魔法は何をしますか? – chappar
これは、特定の文字をエスケープする必要がなくなり、正規表現が通常より短くなります。 vim help - :h \ vを参照してください。 – Tomalak