複数置換の合体No.29457
eigodono1 さん 11/02/02 13:32
 
次のような複数の置換(@+A)を合体させて一つの正規表現をつくれば、どのよう
になりますか?

@
検索:^\t
置換:
A
検索:(^[^()\n]*\([^()\n]*\)[^()\n]*\([^()\n]*\)\n)|(^[\x81\x40-\xFC\xFF]+/[^
\x81\x40-\xFC\xFF\n/]+\n)|(^[\x81\x40-\xFC\xFF]+\([\x81\x40-\xFC\xFF]+)/[^\
x81\x40-\xFC\xFF]+\n)
置換:




[ ]
RE:29457 複数置換の合体No.29458
秀まるお2 さん 11/02/02 14:04
 
 合体させるには、

 例えば   patternAとpatternBがあるとしたら、それを合体させるのは、


   ((patternA)|(patternB))

 のようにすればいいです。ほとんどの場合でそれでうまくいくはずです。

 元々のパターンが

 (patterA)|(patternB)

 のようになっていて、それにpatternBを追加するということなら、

 (patterA)|(patternB)|(patternB)

 のように書いても問題ないです。

^\t

   と、


(^[^()\n]*\([^()\n]*\)[^()\n]*\([^()\n]*\)\n)|(^[\x81\x40-\xFC\xFF]+/[^\x81\
x40-\xFC\xFF\n/]+\n)|(^[\x81\x40-\xFC\xFF]+\([\x81\x40-\xFC\xFF]+)/[^\x81\x
40-\xFC\xFF]+\n)

 を合体させるなら、

(^[^()\n]*\([^()\n]*\)[^()\n]*\([^()\n]*\)\n)|(^[\x81\x40-\xFC\xFF]+/[^\x81\
x40-\xFC\xFF\n/]+\n)|(^[\x81\x40-\xFC\xFF]+\([\x81\x40-\xFC\xFF]+)/[^\x81\x
40-\xFC\xFF]+\n)|(^\t)

 とするればいいかと思います。

[ ]
RE:29458 複数置換の合体No.29459
秀まるお2 さん 11/02/02 14:11
 
>  元々のパターンが
>
>  (patterA)|(patternB)
>
>  のようになっていて、それにpatternBを追加するということなら、

 すみません。間違ってました。

 元々のパターンが

 (patterA)|(patternB)

 のようになっていて、それにpatternCを追加するということなら、

 (patterA)|(patternB)|(patternC)

 と書けばいい、という話もありまして、今回はそれに相当することになると思
います。それで括弧の数が少し減らせますので。

[ ]
RE:29459 複数置換の合体No.29460
eigodono1 さん 11/02/02 14:21
 
>>  元々のパターンが
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>います。それで括弧の数が少し減らせますので。


頭の中がこんがらがってきた。だから、次の正規表現2つをミックスするにはどうす
ればよいのだ?





@
検索:^\t
置換:
A
検索:(^[^()\n]*\([^()\n]*\)[^()\n]*\([^()\n]*\)\n)|(^[\x81\x40-\xFC\xFF]+/[^
\x81\x40-\xFC\xFF\n/]+\n)|(^[\x81\x40-\xFC\xFF]+\([\x81\x40-\xFC\xFF]+)/[^\
x81\x40-\xFC\xFF]+\n)
置換:

[ ]
RE:29460 複数置換の合体No.29461
eigodono1 さん 11/02/02 14:28
 
>>>  元々のパターンが
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>置換:





「括弧の数が少し減らせますので」とは、どういう意味なのか?

[ ]
RE:29460 複数置換の合体No.29462
秀まるお2 さん 11/02/02 14:32
 
 検索文字列の方を、

(^[^()\n]*\([^()\n]*\)[^()\n]*\([^()\n]*\)\n)|(^[\x81\x40-\xFC\xFF]+/[^\x81\
x40-\xFC\xFF\n/]+\n)|(^[\x81\x40-\xFC\xFF]+\([\x81\x40-\xFC\xFF]+)/[^\x81\x
40-\xFC\xFF]+\n)|(^\t)

 にすればいいです。

[ ]
RE:29461 複数置換の合体No.29463
秀まるお2 さん 11/02/02 14:33
 
> 「括弧の数が少し減らせますので」とは、どういう意味なのか?

 例えば  ((a)) と書いても(a)と書いても同じでして、後者の方が括弧の数が
少ないです。

 例えば

 (a)と(b)を合体させるのに、わざわざ((a))|((b))と書かなくても、
 (a)|(b)と書いた方が括弧の数が少ないです。

 余計な括弧を減らすとは、つまり、((a))のような書き方を(a)のような書き方
にする、みたいな意味のつもりです。

[ ]
RE:29463 複数置換の合体No.29464
eigodono1 さん 11/02/02 15:23
 
>> 「括弧の数が少し減らせますので」とは、どういう意味なのか?
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>にする、みたいな意味のつもりです。


これで氷解した。

[ ]
RE:29464 複数置換の合体No.29470
eigodono1 さん 11/02/03 14:51
 
>>> 「括弧の数が少し減らせますので」とは、どういう意味なのか?
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>これで氷解した。


検索:(^[^()\n]*\([^()\n]*\)[^()\n]*\([^()\n]*\)\n)|(^[\x81\x40-\xFC\xFF]+/
[^\x81\x40-\xFC\xFF\n/]+\n)|(^[\x81\x40-\xFC\xFF]+\([\x81\x40-\xFC\xFF]+)/
[^\x81\x40-\xFC\xFF]+\n)|(^\t)
置換:


上記の置換をマクロ登録するには、どうすればいいですか?例えば
F12ファンクションキーをポンと押すだけで、置換できるようにしたい。

[ ]
RE:29470 複数置換の合体No.29471
eigodono1 さん 11/02/03 14:57
 
>>>> 「括弧の数が少し減らせますので」とは、どういう意味なのか?
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>F12ファンクションキーをポンと押すだけで、置換できるようにしたい。


まず、「臨床試験整理マクロ」というタイトルが画面に現れること。
次に、置換終了後、「xxxx個の置換をしました」というメッセージも画面に出ること。
このような条件を満たすにはどのように作ればよいか?

[ ]
RE:29471 複数置換の合体No.29472
秀まるお2 さん 11/02/03 15:22
 
 マクロの内容は以下のようにすればいいはずです。ただ、ほとんどテストしてない
ので、これでいろいろテストしてたしかにこれで大丈夫かどうかはご自身で確認して
みてほしいです。


-----------------------------------------------------------------
    question "臨床試験整理マクロ";
    if( result != yes ) {
        endmacro;
    }
    replaceall "(^[^()\\n]*\\([^()\\n]*\\)[^()\\n]*\\([^()\\n]*\\)\\n)|(^[\\
x81\\x40-\\xFC\\xFF]+/[^\\x81\\x40-\\xFC\\xFF\\n/]+\\n)|(^[\\x81\\x40-\\xFC\
\xFF]+\\([\\x81\\x40-\\xFC\\xFF]+)/[^\\x81\\x40-\\xFC\\xFF]+\\n)|(^\\t)"
        , ""
        , regular, casesense;
    message str(result) + "個の置換を実行しました。";
-----------------------------------------------------------------

 置換をもっと高速にするには、「replaceall」の所を「replaceallfast」に直すと
いいです。

[ ]
RE:29472 複数置換の合体No.29473
秀まるお2 さん 11/02/03 15:30
 
 あと追加で、検索とか置換の類をマクロ化するには、検索文字列の中にある
「\」を「\\」に直すことだけ気をつけて、あとはreplaceall文に直せばいいだ
けです。それほど難しくは無いと思います。

 例えば、「abc\txyz」という文字列を削除する用の置換をするようなマクロな
ら、「abc\txyz」の中にある「\」を「\\」に直すので、つまり、

   replaceall "abc\\txyz", "", regular;

 のようにすればいいです。それで実際にマクロを動かしてテストしてみて、う
まく置換してくれるかどうか確認したらOKかと思います。

[ ]
RE:29473 複数置換の合体No.29476
eigodono1 さん 11/02/03 16:04
 
> あと追加で、検索とか置換の類をマクロ化するには、検索文字列の中にある
≪全文引用されていたのでコミュニテックス会議室システムが引用部分を省略処理し
ました。≫
>まく置換してくれるかどうか確認したらOKかと思います。


Thank you very much.

[ ]