7

正規表現は初めてで、形式を変更するには、いくつかの日付でパターン マッチを行う必要があります。

2000年より前のエントリがないところから行きmm/dd/yyます。yyyy-mm-dd

私がよく知らないのは\1\2、 などのそれぞれの参照を使用するために物事をグループ化する方法です。

mm/dd/yy最初に次のようなものと一致させたいですか( \d{2} ) ( \/\d{2} ) ( \/\d{2} )、それとも同じくらい簡単\d\d/\d\d/\d\dですか?

私の最初のグループ化が部分的に正しい考えであると仮定すると、私は次のようなことをしようとしています:

:%s/old/new/g
:%s/ ( \d{2} ) ( \/\d{2} ) ( \/\d{2} ) / ( 20+\3) - (\3) - (\1) /g

編集: 申し訳ありませんが、置換はyyyy-mm-dd formatスラッシュではなくハイフンで行われます。

4

4 に答える 4

11

別の回答についてコメントするつもりでしたが、複雑になりました。

設定に注意してmagicください。エスケープされていない括弧をグループ化する場合は\v、パターンのどこかに含める必要があります。( を参照:help magic)。

コマンドでスラッシュ以外のものを使用すると、スラッシュのエスケープを回避できます:s

あなたは近くにいます。:)ただし、一致するために同じ場所にスペースが必要になるため、これらのすべてのスペースは必要ありません。

私が使用する私のソリューションでは\v、括弧と感嘆符をエスケープする必要がないため、エスケープせずにパターンでスラッシュを使用できます。

:%s!\v(\d{2})/(\d{2})/(\d{2})!20\3-\2-\1!g

ただし、これは、3 桁以上で開始または終了する「内側」の項目にも一致します。開始/終了基準を指定できれば、それが役立つ可能性があります。単純な「単語境界」条件が機能すると仮定すると、次を使用できます<>

:%s!\v<(\d{2})/(\d{2})/(\d{2})>!20\3-\2-\1!g

特にあなたのものを批評するには(学習のために!):

:%s/ ( \d{2} ) ( \/\d{2} ) ( \/\d{2} ) / ( 20+\3) - (\3) - (\1) /g
  • おそらくあなたはそれらを望まないので、スペースを取り除きます!
  • あなたのグループ化は、\( \)または\v機能する必要があります
  • \{2}使用しない限り、あなたも必要です\v
  • スラッシュをグループ 2 と 3 に入れています。つまり、スラッシュも置換に表示されます。
  • 出力に括弧は必要ありません。
  • テキストを直接置き換えています。+出力に 20の後は必要ありません
于 2012-11-02T19:19:47.700 に答える
1

これを試して:

:%s/\(\d\{2}\)\/\(\d\{2}\)\/\(\d\{2}\)/20\3-\2-\1/g

興味のあるビットは次のとおり\(...\)です。\d-数字; \{N}-N回発生。および\/-文字通りのスラッシュ。

So that's capturing two digits, skipping a slash, capturing two more, skipping another slash, and capturing two more, then replacing it with "20" + the third couplet + "-" + the second couplet + "-" + the first couplet. That should turn "dd/mm/yy" into "20yy-mm-dd".

于 2012-11-02T18:54:23.757 に答える
1

わかりました、これを試してください:

 :0,$s#\(\d\{1,2\}\)/\(\d\{1,2\}\)/\(\d\{1,2\}\)#20\3-\2-\1#g

一致するセクションと置換セクションの両方で多くのスペースと、ほとんどの括弧を削除しました。これは、あなたが求めていた形式に含まれていなかったためです。

注意事項:

  • vi を使用すると、「/」を他の文字に変更できます。これは、スラッシュを含む文字列を一致させようとするときに役立ちます。通常は「#」を使用しますが、必ずしもそうである必要はありません。
  • 括弧と中括弧をエスケープする必要があります
  • %s の代わりに :0,$ を使用していますが、同じ意味だと思います。次のコマンドを行 0 と末尾の間のすべての行に適用します。
于 2012-11-02T19:18:46.863 に答える
-1

試合の場合:(\d{2})\/(\d{2})\/(\d{2})

交換の場合:20\3\/\1\/\2

于 2012-11-02T18:54:01.263 に答える