Amazon.co.jp ウィジェット 正規表現でマッチしたキーワードを「行位置を変えずに」抽出する方法 - PC破壊日記的ブログ

Home > PC破壊日記 > | 雑談 > 正規表現でマッチしたキーワードを「行位置を変えずに」抽出する方法

正規表現でマッチしたキーワードを「行位置を変えずに」抽出する方法

このエントリーをはてなブックマークに追加

小ネタが連続していますが、今回も小ネタ。

正規表現でマッチさせた部分を抽出したい。
しかし、行位置を変えずに、抽出した行に抽出した部分を並べたい。
(逆に言えば、マッチしたキーワード以外の部分を削除したい。)

まず前者の時点で、Windowsでは非常に困難です(抽出する機能のあるソフトが極端に少ない)が、それに加えて、行位置を変えたくない、というおまけ付き。
Unix/Linuxであれば、awkで何とかなるでしょう。perlなどでもできるでしょう。
しかし、Windowsで利用可能なテキストエディタで、正規表現検索・置換を搭載したソフト(K2Editor、サクラエディタ、xyzzyなど)でこの作業を行うには...?

最初、正規表現1回で何とかできないかを画策しましたが、全くうまくいかず。
しかし、正規表現置換を複数回使い、なおかつそのテキスト内で使用されない文字が2種類あれば可能なことを発見しました。

その方法は、「続きを読む」から。

 


 ※前提条件

  • そのファイル中で使用しない文字が2種類あること
  • 正規表現置換、後方参照ができるテキストエディタであること

例:
以下のテキストから、3桁以上の数字を抽出し、デリミタ(区切り)として「,」を入れて抽出する。

1354854ysjduinjc455dsuiwdkj23diwej456
dsukehkj3545jldjsijlkefjk7738kdlks13klvm7770
7346dksfuhukmvkld9332

求めたい結果

1354854,455,456
3545,7738,7770
7346,9332

このテキスト内で使用していない文字として、「%!」を用います。

  1. マッチしたキーワードを保護するため。「%!」と「!%」でくくる。
    正規表現置換+後方参照を用います。
    置換前:([0-9][0-9][0-9][0-9]*) 【今回の場合。半角括弧内にマッチしたいパターンを書く。】
    (後方参照のため、カッコでくくる)
    置換後:%!\1!%
    正規表現の例 s/([0-9][0-9][0-9][0-9]*)/%!\1!%/g
  2. 先頭からマッチした部分まで削除
    正規表現置換を用います。
    このとき、マッチするパターンが無い行は空白行になります。
    置換前:^[^%]*
    置換後:
    正規表現例 s/^[^%]*//
  3. マッチ部分から行末まで削除
    正規表現置換を用います。
    置換前:!%[^%]*$
    置換後:
    正規表現例 s/!%[^%]*$//
  4. マッチした文字間を削除
    (デリミタを挿入する場合はここの「置換後」で指定します)
    正規表現置換を用います。
    置換前:!%[^%]%!
    置換後:, 【挿入したいデリミタを書く。無ければ何も書かない。】
    正規表現例 s/!%[^%]%!/,/g
  5. くくり文字を削除1
    単純置換です。正規表現でもできます。
    置換前:!%
    置換後:
    正規表現例 s/!%//g
  6. くくり文字を削除2
    単純置換です。正規表現でもできます。
    置換前:%!
    置換後:
    正規表現例 s/%!//g

これでできると思います。お試しあれ。


  

Comments:0

Comment Form


画像の中に見える文字を入力してください。

Trackbacks:0

TrackBack URL for this entry
http://pc-diary.com/mt/mt-tb.cgi/1623
Listed below are links to weblogs that reference
正規表現でマッチしたキーワードを「行位置を変えずに」抽出する方法 from PC破壊日記的ブログ
  • タグ: 正規表現
  • Home > PC破壊日記 > | 雑談 > 正規表現でマッチしたキーワードを「行位置を変えずに」抽出する方法

    2進数時計
    ※クリックで読みやすくなります。
    ※この時計の時刻は、閲覧しているパソコンのものであり、必ずしも正確な時間とは限りません
    Search
    Feeds

    Google Adsense
    Tag Cloud

    このページの最初に戻る