6

vimを使ってテキストからいくつかのデータを抽出したいと思います。データは次のようなものです。

72" title="(168,72)" onmouseover="posizione('(168,72)');" onmouseout="posizione('(-,-)');">>
72" title="(180,72)" onmouseover="posizione('(180,72)');" onmouseout="posizione('(-,-)');">>
72" title="(192,72)" onmouseover="posizione('(192,72)');" onmouseout="posizione('(-,-)');">>
72" title="(204,72)" onmouseover="posizione('(204,72)');" onmouseout="posizione('(-,-)');">>

抽出する必要のあるデータは、title = "(168,72)"に含まれています。
特に、これらの座標のみを抽出することに興味があります。

私はvimを使ってtitle="の前に最初にすべてを削除することについて考えていますが、私は実際には正規表現の第一人者ではありません..だから私はあなたに尋ねています:誰かヒントがあれば:教えてください:)

4

4 に答える 4

4

これにより、各行が1行あたりのタブ区切りの座標リストに置き換えられます。

:%s/.* title="(\(\d\+\),\(\d\+\))".*/\1\t\2
于 2011-07-03T18:50:12.967 に答える
4

このタスクは、はるかに単純なソリューションで、通常のコマンドを使用して数回のキーストロークで実行できます。

:%normal df(f)D

これの意味は:

  1. %-すべてのファイル行で通常のコマンドを実行します。
  2. normal-通常モードで次のコマンドを実行します。
  3. df(-括弧(括弧を含む)が見つかるまですべてを削除します。
  4. f)-カーソルを);に移動します。
  5. D-行末まですべて削除します。

範囲を設定することもできます。たとえば、5行目から10行目までを実行します。

:5,10normal df(f)D
于 2011-07-04T17:19:23.727 に答える
3

If you want an ad hoc solution for this one-off case, it might be quicker simply to select a visual block using CTRL-v. This will let you select an arbitrary column of text (in your case, the column containing title="(X,Y)"), which can then be copied as usual using y.

于 2011-07-03T19:31:12.493 に答える
0

title =()内のすべてを一致させ、次のように他のすべてを破棄できます。

:%s,.*title="(\(.*\))".*,\1,
于 2011-07-03T18:52:55.930 に答える