포럼: 一般話題(質疑・要望等) (Thread #707989)

すべて置換の正規表現の”「すべて置換」は置換の繰返し”選択しても、繰返し置換しない (2024-04-01 12:10 by okaiho #754693)

置換前:\t\r\n
置換後:\r\n

excelからコピーしたデータ、いくつの余計なタブ記号があって、正規表現のすべて置換を利用としたら、何回もやって0件になった。
【「すべて置換」は置換の繰返し】のチェックはしたが、一回で置換出来なかった。


本文内容:

テスト:
店1、店2、店3
ST
IPO

Reply to #754693×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login

Re: すべて置換の正規表現の”「すべて置換」は置換の繰返し”選択しても、繰返し置換しない (2024-04-13 19:10 by AC #754731)

こんにちは、okaiho さん。

まず、「すべて置換」は置換の繰返しオプションに対する誤解があるように思います。

右クリックヘルプでは「位置指定を含むパターンを消去する場合にのみ結果が異なります」とあります。
ヘルプには「 正規表現を使用する場合にのみ指定可能です。旧「すべて置換」及び「すべて行置換」の切り替え機能に相当します」とあります。

試してみたところ次のような場合に違いがありました。

abbbbbbbb というテキストに対して、a の後ろにある b を意味する (?<=a)b を、すべて置換は置換の繰返しですべて置換すると、すべての b が削除されて a のみが残りました。

これの解釈はこうです。テキストの最初の状態では a の後ろにある b は2文字目にある b だけです。ですからこれが削除されます。すべて置換は置換の繰返しオプションがオフの場合はこれで終わりです。そうでない場合は、前回置換操作をした位置から再び検索をします。そうすると3文字目にあった b が2文字目に繰り上がってきており、これは a の後ろの位置ですから、再びこの b が置換対象になります。これがこのオプションの動作です。

okaiho さんは次のように期待するかもしれません。
\t\t\t\t\t\r\n というテキストに対して、\r\n の前にあるタブ文字を意味する \t(?=\r\n) を、すべて置換は置換の繰返しですべて置換すると、一番後ろにあるタブから順次さかのぼってすべてのタブが削除されるのではないかと。
そうはなりませんでした。繰り返しといってもテキスト全体を何度もスキャンするのではなく、前回の位置より後ろが繰り返し検索されるという意味でした。難しいですね。

最後になりましたが、改行の前のタブ文字をすべて一度に置換するのであれば、\t+\r\n というパターンが使えます。1つ以上のタブ文字と改行という意味です。
Reply to #754693

Reply to #754731×

You can not use Wiki syntax
You are not logged in. To discriminate your posts from the rest, you need to pick a nickname. (The uniqueness of nickname is not reserved. It is possible that someone else could use the exactly same nickname. If you want assurance of your identity, you are recommended to login before posting.) Login