タグ付けされた質問 「regular-expression」

正規表現(「regex」に短縮されることが多い)は、文字列内のパターンの照合に使用される宣言型言語で記述された式です。

1
カンマ区切りの単語に基づいて並べ替え
通常のコマンド:sortは、列または仮想列(\%cまたは\%v)に基づいて行をソートできます。より高いレベルの論理列をソートキーとして使用できますか?正規表現の使用は、このシナリオでは少し複雑に見え(列は行末にありますか?)、ソートユーティリティの機能(sork -k)と似ていますが、この機能によるソートはWindowsでは使用できません。Vimプラグインも役立ちます。 たとえば、コンマで区切られた最後の列に従って、下の2行を並べ替えます。私の実際のシナリオには、はるかに多くの列と文字列パターンがあります。列区切り文字を指定すると、大幅に簡素化されます。 xxx,yyy,zzz,0x123 zzxz,xxxx,yyyy,0x121



3
検索でスラッシュをエスケープし、長い文字列を置き換える代替手段
文字列内のすべての特殊文字をエスケープする必要がある以外に、文字列のvim検索と置換に代替手段はありますか? たとえば、次の文字列を照合して何かに置き換えたい場合 [ERROR] Login unsucessful それから私はしなければなりません :%s/\[ERROR\]\ Login\ unsucessful/something/g そして、多くの特殊文字を含む複雑な文字列の場合、それはより醜く、苦痛になります 私は何かしたいです :%s/"[ERROR] Login unsucessful"/something/g すべての脱出を回避します。このような機能はありますか?

6
n行を削除して1行のスクリプトをスキップ
単にn行を削除し、1行をスキップして、ドキュメントの最後まで繰り返す基本的なVimスクリプトを作成したいと思います。特定の一致は気にせず、行を削除したいだけです。例えば; したがって3ddj、ドキュメント全体に対してコマンドを繰り返したいと思います。 Text I want to keep. Text I want to delete. Text I want to delete. Text I want to delete. Text I want to keep. Text I want to delete. Text I want to delete. Text I want to delete. Text I want to keep. Text I want …


2
「x」で始まる重複行、「x」を「y」に置き換えますか?
次のパターンのファイルがあります。 foo 111 baz foo 222 baz foo 333 baz に変える必要がある foo 111 bar 111 baz foo 222 bar 222 baz foo 333 bar 333 baz したがって、で始まるすべての行を複製し、複製fooのみを変更fooして、残りの行(それぞれの場合で異なる)はそのままにしておきます。これを行う方法?

2
Vimでの大文字と小文字が混在する正規表現の置換
多くの場合、大文字と小文字が混在するファイルがある状況に遭遇します。例えば、 CamelCase and camelCase 生成するVim正規表現の置換を探しています。 AnotherCase and anotherCase 今は、視覚的にラインを選択した後、2つのステップでこれを行います。 :s/CamelCase/AnotherCase/g :s/camelCase/anotherCase/g これは1つの置換ステップで可能.vimrcですか、それとも関数のような他のオプションを調べる必要がありますか?

5
ファイルの2つのパターン間のコンテンツを置き換える方法は?
ファイルの形式は次のとおりです。 <common> fitnes=0 genetic=1 method=0 </common> <inputs> foo=bar bar=foo </inputs> <limits> balance=200.00 </limits> との間にあるものをすべて削除<inputs>し</inputs>(パターンit-selfを除く)、別のファイル(例:)のコンテンツに置き換えますfoo.txt。言い換えるとfoo=bar、bar=fooと行が別のコンテンツに置き換えられます。 おそらく、次のように、複数行の一致を削除する方法に似ています。 :g/<inputs/,/inputs>/d しかし、別のファイルのコンテンツを挿入するために何を置き換える必要があるかはわかりませんdが、一致するパターンを保持したいと思います。 同様の方法は、htmlタグの内部コンテンツを削除することです。 :/<inputs>/norm vitd しかし、ファイルのコンテンツをそれにどのように追加するかわかりません。 ライナーは別のスクリプトの一部になるため、理想的には1つのライナーを見つけようとしています。 どうすればそれを達成できますか?

2
大文字で終わる単語と特定の文字を一致させる方法は?
lblSERINOd文のような言葉があります。単語は空白で区切られます。 dこのような単語の最後のをに置き換えたいと思いますu。したがって、たとえば次のようにlblSERINOdなりますlblSERINOu。 私は試しましたs/.*\ud /u /gが、Vimは見つけられないと言っています.*\ud。 ここの問題は何ですか?

1
試合内でより短い試合を好む正規表現?(これは貪欲でないよりも複雑です)
バッファ内であいまい検索を実行するためのスクリプトを作成しようとしています。主なアイデアは、何らかの入力を取り.\{-}、すべての文字のペアの間に挿入することです。たとえば、にfooなりf.\{-}o.\{-}oます。 これはかなりうまく機能しますが、理想的ではない多くの一致が生じます。あいまい検索では、最短の一致が最初に得られると思います。次の例について考えてみます。 public void put() put(so、p.\{-}u.\{-}t)のあいまい検索を実行すると、文字列全体に一致しますpublic void putが、putその一致内で短い方が便利です。 貪欲でない演算子は、早く終了する一致を見つけるのに適していますが、同時に開始する一致を優先できるものが必要です。概念的には、両方向で貪欲ではないはずです。これは可能ですか?

1
=〜演算子の使用法
VimScriptの正規表現比較演算子について少し混乱しています。 :h =~?私の理解をよく見ると、=~これは正規表現一致を行うために使用できます(?大文字と小文字を区別しないようにすることで)。 しかし、このコードは "no"を出力します: let s:myVar = "S123" if s:myVar =~? "^S\d+" echo "yes" else echo "no" endif =~演算子を間違って使用していますか?

1
vimで指定された文字列で始まる行を検索しますか?
私はこのコードスニペットを持っています: # import ipdb; ipdb.set_trace() def foo(): ... import ipdb; ipdb.set_trace() ... # import ipdb; ipdb.set_trace() コメントされていないipdb行のみが検索されるように、検索クエリを指定するにはどうすればよいですか? コマンドは次のようになると思います: /import ipdb/(line start flag)

2
正規表現でネストされた一致するグループ
次の方法でpython式を変換するときの一般的な使用例があります。 value 1 value 2 value 3 に ['value 1', 'value 2', 'value 3'] 最も簡単な方法はマッピングを使用することですが、このタスクの代わりに使用したかったのです。 これまでのところ私は得ました: s/\(.*\n\)\+/[&]/g その結果 [value 1 value 2 value 3 ] この昇給私が一致することができるようにしたいので、質問、\(.*\)ではなく\n、使用する内部のマッチの結果'...'。 これを行う方法を知っていますか?


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.