2012-04-29 10 views
2

を小文字にするあなたが行簡単な正規表現 - ダブルクォーテーションの間のアンダースコアでスペースを置き換えると、すべての文字が

<string name="final_time">Final time</string> 
<string name="after_extra_time">After extra time</string> 

<string name="Final time">Final time</string> 
<string name="After extra time">After extra time</string> 

ような行を変更するために正規表現で私を助けることができるように二重引用符の間で交換してくださいスペースをアンダースコアで囲み、すべての文字を小文字にします。

この正規表現は、VIMの検索/置換で使用します。

答えて

3

一般的なアプローチ:これは大文字(\u)と

  • 2スペースで区切られた単語で構成されています(とその

    • 開始@nameすべての文字列を置換し

      :%s/\(<string name="\)\(\u\)\([^" ]\+\) \([^" ]\+\)/\1\l\2\e\3_\4/ 
      

      \([^" ]\+\) \([^" ]\+\))と

    • は対応する小文字(\l\2\e)に置き換えられます。
    • また、スペースをアンダースコアに置き換えます。

    @nameですべて小文字にするために、これを簡略化することができます

    :%s/\(<string name="\)\([^" ]\+\) \([^" ]\+\)/\1\l\2_\3_\e/ 
    

    を複数のスペースを取り除くために、2つの手順を行います。まず、属性値小文字を作る:

    :%s/\(<string name="\)\([^"]\+\)/\1\l\2\e/ 
    

    そして、\@<=は正ルックの背後に表現するVimの方法であるとアンダースコア

    :%s/\(<string name="[^"]*\)\@<= /_/g 
    

    注意して属性値内のすべてのスペースを置き換えますアサーション

  • +0

    トップスコアラートップスコアラー

    +0

    この正規表現は Top Scorersトップスコアラーの代わりにトップスコアラー

    +0

    @Tomaszおっと、私はバックリファレンスが間違っています。再試行する。 – Tomalak

    1

    (この答えは時代遅れであり、完全として現在尋ねた質問に答えていません。しかし、それはここに保持さではなく、他の回答のアドバイスに削除されます。)

    あなたはだまされてはいけないことができ、正規表現をしたい場合なぜ、それはいくつかの仕事を取るでしょう。しかし、Vimを使用している間、通常はよりリラックスした姿勢をとります。これは役に立ちませんか?

    :s/"final time"/"final_time"/g 
    

    あなたは交換は1回だけにしたい場合は、末尾gを省略することができます。一方、あなたはそれが

    :s/"\cfinal time"/"final_time"/g 
    

    (、実際にこの権利を行うには、しかしTomalakの答え@参照)、パターンマッチが大文字と小文字を区別しないにすることができます。

    しかし、Vimを使用しているときは、次のように簡単な方法があります。

    1. 押しqqはマクロq録音を開始します(あなたが好むよう、など、マクロa記録を開始するかqaを、わからない場合は、qqはタイプ最速と他のと同じくらい良いです)。
    2. 検索コマンド/"\cfinal time"を入力し、Enterキーを押します。
    3. f<Space>または6lを押して、スペースにカーソルを移動します。
    4. r_を押してスペースをアンダースコアに置き換えます。
    5. qを押してマクロの記録を終了します。

    あなたが好きなら、ただちに@qを押して、Vimが自動的に同じ操作を繰り返すようにすることができます。ファイル全体に複数のストリング"final time"が散在していて、すべて同じ編集が必要な場合、これはすばやく便利です。 の3番目のと同じ操作をVimに実行させたい場合は、@@を押して最後の@の操作を繰り返すことができます。これは余分に速いです。

    (@Tomalakに/"\cfinal time"を追加してくれてありがとうございます。大文字と小文字を区別しないように検索が変更されています。)

    +0

    あなたは '\ c'を忘れました – Tomalak

    +0

    @トマラク:私は '\ c'が私には馴染みがないと認めます。一方、答えが出始めたらOPが質問を更新したように見えるので、もう一度見て、 '\ c'を調べます。ありがとう。 – thb

    +0

    '\ c'は大文字と小文字を区別しない正規表現です。あなたのものは一致しませんでした。 – Tomalak

    関連する問題