2011-11-17 8 views
11

正規表現にマッチさせて置換を実行するためにVimを使いたいと思います。 Vimの私でのみRS後の最初の列のタブの文字...Vimに正のルック・バック・アサーションと置き換え?

-

rs11223-A  -A 
rs23300-G  -TTA 
rs9733-T   -G 
rs11900000-GT -TTG 

私はダッシュを代用したい():私はこのような行を持つTSVファイルを持っています

:%s/(?<=^rs[0-9]{1,12})-/\t/g 

誰かが私の問題と正しい解決策を指摘できましたか?

答えて

17

設定に依存している可能性がありますが、私の環境では{ , }の前に\をつける必要があります。

また、Vimは\zs\zeのマッチングを開始して終了するので、通常は正規表現のルックアライメントを処理する必要はありません。

これは、あなたが欲しいものを行います。

:%s/^rs\d\{1,12}\zs-/\t/g 
0

は、次の操作をしたい:

%s/^\(rs[0-9]\{1,12\}\)-/\1\t/g 

Vimの正規表現は{}()のためのいくつかの特別なエスケープシーケンスが必要です。

また、置換セクションで一致する文字列を挿入するには\1が必要です。しかし、あなたはまた、ちょうど落ち着く可能性があり掲載するもので、あなたの実際のデータはより複雑かもしれ

:%s/\d\@<=-/\t/g 

7

正は、背後に見える使用して行われます:

\@<= 

は、だからあなたのようなものを使用することができます以下のために:

:%s/-/\t 

rs場合は、行の先頭にある必要があり、あなたが使用することができます

:%s/^rs\d*\zs-/\t 
+0

#2がなければならないであろう:%sの/^RS \ dは\を@<= -/\トン/ gの – KomodoDave

+0

@KomodoDave:(^)試合の開始を指定し、アンカーを使用する\zsあなたパターンは行頭で 'r​​s'にマッチし、直後にダッシュ(' -')の前に* single *数字( '\ d \ @<-----の背後にある正の表情)が続きます。与えられたデータ内の線はそのパターンと一致しません。アンカーを主張するならば、追加したばかりのパターンを使用することができます。 –

+0

OPは文字列の意味で列を意味すると思っていましたが、おそらく彼はそうではありません。私は自分のコピーしたものを編集して、\ dを〜と置き換えませんでした。私が書いたかったのは、:%s/^ rs - \ @<=/\ t/g最初の行開始時に 'rs'の後のchar列。 – KomodoDave

関連する問題