[スレッド全体]

[8159] Re2:ある連続した奇数個の文字列を偶数個に置換したいのですが…… 
2016/7/30 (土) 04:44:36 もか
Mozilla/5.0 (Windows NT 6.3; WOW64; rv:47.0) Gecko/20100101 Firefox/47.0
▼ 通りすがれさん
>  もしくは奇数個の文字列を偶数個に置換する方法を、偶数個の文字列がなくなるまで何度も繰り返せば大丈夫な気もしますが……。
混乱しているみたいですけど、奇数個の文字列を偶数個にして、奇数個の文字列がなくなるまで…
の誤記だと思います。

正規表現で、最初に偶数個にマッチさせて、その後ろに1個マッチすれば、それは奇数のはずです。
(ABCABC)*(ABC) → $&$2
これだけでもできる、と思たけど無理でした。
前後がマッチしないことが必要みたいですね。
(?<!ABC)(ABCABC)*(ABC)(?!ABC) → $&$2

難しいことをするには、jsマクロのほうが楽かもしれません。
文字列というのが長さが可変長の正規表現の場合は難しいですが、応用すればできなくもないと思われます。
//replace.js みたいな名前で保存
Editor.SelectAll();
var s = Editor.GetSelectedString();
// 大文字小文字を区別しないなら/(ABC)+/ig
s = s.replace(/(ABC)+/g, function(x){
    if (x.length % 6 == 3){ // ←長さの2倍と1倍の数を指定
        return x + x.substr(x.length - 3,3); ←長さは1倍の数を指定
    }
    return x;
});
Editor.InsText(s);

それか単純な文字列なら3回全置換する。
ABCABC → [マーカー] に置換
ABC → [マーカー] に置換
[マーカー] → ABCABC に置換

単純じゃない場合は[マーカーAB/C/AB/C]みたいにして分割して記憶して後で戻すなど工夫が必要。
正規表現で
(AB)(C)(AB)(C) → [マーカー$1/$2/$3/$4]
(AB)(C) → [マーカー$1/$2/$1/$2]
\[マーカー([A-Z]{2})/([A-Z])/([A-Z]{2})/([A-Z])\] → $1$2$3$4

[▼次のスレッド]
INCM/CMT
Cyclamen v3.81