正規表現で特定文字列を出現回数の条件をNo.29160
ringoch さん 10/11/01 18:23
 
抽出したい特定文字列の出現回数が1回だけなら、

^[^ほげ]*[\r\n]+

の正規表現が使えるのですが、出現回数の上限を加えたい場合は、どのような正規表
現を使えばいいのでしょうか?

現在は妥協策として、一度データの保存を行い、

.*ほげ.*ほげ.*ほげ.*

でgrep検索を行い、検索結果に対して

^[^:]+:

の置換を行い、データを整形しています。

しかしこれだとgrepを使用しているのでマクロ化出来ない&保存作業でエラーが多発
するので、出来れば1回の置換処理だけで抽出したいです。
よろしくお願いします。

[ ]
RE:29160 正規表現で特定文字列を出現回数No.29165
秀丸担当 さん 10/11/02 09:38
 

>現在は妥協策として、一度データの保存を行い、
>
>.*ほげ.*ほげ.*ほげ.*
>
>でgrep検索を行い、検索結果に対して
>
>^[^:]+:
>
>の置換を行い、データを整形しています。

現状では、おっしゃる通りこういった方法でするしかないかもしれません。
grepでもマクロは作ることはできて、

  $s = searchbuffer;
  #f = searchoption;
  localgrep ".*ほげ.*ほげ.*ほげ",regular,nohilight;
  replaceallfast "^[^:]+: ","",regular;
  setsearch $s, #f;

というような感じで同じような処理を一括でできると思います。


ちなみに
>抽出したい特定文字列の出現回数が1回だけなら、
>
>^[^ほげ]*[\r\n]+

という方法の"[^ほげ]"は、「"ほ"または"げ"ではない1文字」という意味にな
ってしまうので、期待する結果にはならないかもしれません。
1回だけの場合も3回の方法と同じほうがいいかもしれないです。

input関数を使うとマクロで検索文字列を入力するようにもできます。

  $s = searchbuffer;
  #f = searchoption;
  $a=input("検索文字列",$s);
  localgrep $a,regular,nohilight;
  replaceallfast "^[^:]+: ","",regular;
  setsearch $s, #f;

[ ]