|
いいじまです。
> 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+」を書いてあるから大丈夫だろう、と期待していた
のですが、うっかりしていました。
|
|