Tweet |
小ネタが連続していますが、今回も小ネタ。
正規表現でマッチさせた部分を抽出したい。
しかし、行位置を変えずに、抽出した行に抽出した部分を並べたい。
(逆に言えば、マッチしたキーワード以外の部分を削除したい。)
まず前者の時点で、Windowsでは非常に困難です(抽出する機能のあるソフトが極端に少ない)が、それに加えて、行位置を変えたくない、というおまけ付き。
Unix/Linuxであれば、awkで何とかなるでしょう。perlなどでもできるでしょう。
しかし、Windowsで利用可能なテキストエディタで、正規表現検索・置換を搭載したソフト(K2Editor、サクラエディタ、xyzzyなど)でこの作業を行うには...?
最初、正規表現1回で何とかできないかを画策しましたが、全くうまくいかず。
しかし、正規表現置換を複数回使い、なおかつそのテキスト内で使用されない文字が2種類あれば可能なことを発見しました。
その方法は、「続きを読む」から。
※前提条件
- そのファイル中で使用しない文字が2種類あること
- 正規表現置換、後方参照ができるテキストエディタであること
例:
以下のテキストから、3桁以上の数字を抽出し、デリミタ(区切り)として「,」を入れて抽出する。
1354854ysjduinjc455dsuiwdkj23diwej456
dsukehkj3545jldjsijlkefjk7738kdlks13klvm7770
7346dksfuhukmvkld9332
求めたい結果
1354854,455,456
3545,7738,7770
7346,9332
このテキスト内で使用していない文字として、「%!」を用います。
- マッチしたキーワードを保護するため。「%!」と「!%」でくくる。
正規表現置換+後方参照を用います。
置換前:([0-9][0-9][0-9][0-9]*) 【今回の場合。半角括弧内にマッチしたいパターンを書く。】
(後方参照のため、カッコでくくる)
置換後:%!\1!%
正規表現の例 s/([0-9][0-9][0-9][0-9]*)/%!\1!%/g - 先頭からマッチした部分まで削除
正規表現置換を用います。
このとき、マッチするパターンが無い行は空白行になります。
置換前:^[^%]*
置換後:
正規表現例 s/^[^%]*// - マッチ部分から行末まで削除
正規表現置換を用います。
置換前:!%[^%]*$
置換後:
正規表現例 s/!%[^%]*$// - マッチした文字間を削除
(デリミタを挿入する場合はここの「置換後」で指定します)
正規表現置換を用います。
置換前:!%[^%]%!
置換後:, 【挿入したいデリミタを書く。無ければ何も書かない。】
正規表現例 s/!%[^%]%!/,/g - くくり文字を削除1
単純置換です。正規表現でもできます。
置換前:!%
置換後:
正規表現例 s/!%//g - くくり文字を削除2
単純置換です。正規表現でもできます。
置換前:%!
置換後:
正規表現例 s/%!//g
これでできると思います。お試しあれ。
Comments:0
Trackbacks:0
- TrackBack URL for this entry
- https://pc-diary.com/movt_direc_post/mt-tb.cgi/1623
- Listed below are links to weblogs that reference
- 正規表現でマッチしたキーワードを「行位置を変えずに」抽出する方法 from PC破壊日記的ブログ