教えて下さい あいまい置換No.10069
小野雅弘 さん 23/01/24 14:40
 
こちらでは色々お世話になっています。

こういった金額が含まれる文章から、

100円…00円51銭…00円29銭…11円31銭


00円のみを削除し、

100円…51銭…29銭…11円31銭

という風に置換できないものでしょうか。

「00円..銭」→ 「..銭」であいまい置換をすると、 

100円…..銭…..銭…..銭

になってしまいます。
よろしくお願いします。

[ ]
RE:10069 教えて下さい あいまい置換No.10070
でるもんたいいじま さん 23/01/24 14:55
 
秀丸愛用者の「でるもんた・いいじま」と申します。

> こういった金額が含まれる文章から、
> 100円…00円51銭…00円29銭…11円31銭
> 00円のみを削除し、
> 100円…51銭…29銭…11円31銭
> という風に置換できないものでしょうか。
>
> 「00円..銭」→ 「..銭」であいまい置換をすると、 
> 100円…..銭…..銭…..銭
> になってしまいます。

曖昧検索ではなく正規表現を使って、
  「([^1-9,])0+円([0-9]+銭)」 → 「\1\2」
でどうでしょうか。

こうすれば、最初の ([^1-9,]) には「…」の部分がマッチしてくれます。
(実際には何かの文章?)

※千円以上の数字にコンマが入る可能性を考えて、[...] の中に全角のコンマを入れ
てあります。不要であれば削ってください。

あるいは、正規表現ヘルプに
   「(?<!expression) 前方不一致指定」
という項目がありますが、これを使って
  「(?<![1-9,])0+円([0-9]+銭)」 → 「\1」
でもいけるはずです。

[ ]
RE:10070 教えて下さい あいまい置換No.10071
小野雅弘 さん 23/01/25 12:30
 
いいじま様

どうもありがとうございました。何が書いてあるかは分かりませんが、
キー操作を保存し、必要と思われる
replaceall "([^1-9,])0+円([0-9]+銭)" , "\\1\\2" , regular;
を取り出すことができました。

これで九分九厘動作します。

しかし、ごくレアなケースと思われますが、

100円…00円51銭…00円29銭…11円31銭…11銭…51円74銭…1
00円66銭

100円…51銭…29銭…11円31銭…11銭…51円74銭…1066銭

のように、最後の100円66銭の部分だけうまく行きません。
追加でお知恵をお貸し頂けませんでしょうか。
よろしくお願いします。

小野

[ ]
RE:10071 教えて下さい あいまい置換No.10072
でるもんたいいじま さん 23/01/25 14:34
 
いいじまです。

> replaceall "([^1-9,])0+円([0-9]+銭)" , "\\1\\2" , regular;
....
> しかし、ごくレアなケースと思われますが、
> 100円…00円51銭…00円29銭…11円31銭…11銭…51円74銭…
>100円66銭
> 100円…51銭…29銭…11円31銭…11銭…51円74銭…1066銭
> のように、最後の100円66銭の部分だけうまく行きません。
> 追加でお知恵をお貸し頂けませんでしょうか。

スミマセン、実際にstep by stepで試してみて原因が分かりました。

☆ ☆ ☆

結論としては、もし「00円」(あるいは「0円」「000円」などでも)の前に出
現する文字が「…」に限られるのであれば、
  replaceall "(…)0+円([0-9]+銭)" , "\\1\\2" , regular;
としてください。

あるいは、金額の直前の文字としてたとえば「…」「:」「→」の3通りが考えられ
るのであれば、
  replaceall "([…:→])0+円([0-9]+銭)" , "\\1\\2" , regular;
のようにしてください。
ここの ([...]) の中には、好きな文字をいくつでも書けます。
半角のハイフンを使って、A-Z のようにまとめて指定することも可能です。

ただし、半角文字の中には特殊な意味になるものがいくつかあるので(上記の「半角
ハイフン」もその典型例です)、まずは全角文字だけで運用していただければと思い
ます。

☆ ☆ ☆

以下は、詳しい方のための備忘録です。

この正規表現の意図としては、([^1-9,]) というパターンを上記のテキストの
「…」にマッチさせたい、ということだったのですが、実際に上記のテキストて試し
てみたところ、「100円66銭」の2文字目の「0」を、このパターンがキャッチ
してしまうようです。

この式の直後に最長一致の「0+」を書いてあるから大丈夫だろう、と期待していた
のですが、うっかりしていました。

[ ]
RE:10072 いいじま様 ありがとうございまNo.10073
小野雅弘 さん 23/01/26 07:58
 
いいじま様

ありがとうございます。これで仕事を一手間減らせそうです。

小野

[ ]