例えば、
「-480円-2.2%」
のような文字列があったとします。
前半はカンマ区切りにもなり得る数値と円
後半は小数点以下があり得るパーセンテージです。
それを、
"-480","-2.2"
という2つの文字列をダブルクオーテーションで囲ったカンマ区切りのデータに置き換えるために次のような正規表現を考えました。
パターン「(-*)(\d{1,3})(((,)\d{3})*)(円)(-*)(\d+)(.)(\d*)%」
置換文字列「"\1\2\4\","\7\8\9\10"」
上記の置換文字列は、後方参照の考え方で、パターンないのカッコの中の番号を引用しているのですが、
くせ者が、最後の\10というもので、これは10番目のパターンとして解釈して欲しいのですが、
「\1」と「0」という組み合わせと解釈されてしまい、以下のように置換されてしまいます。
"-480","-2.-0"
10番目以降のパターンを表現するには10という数字は使えないのでしょうか?
10番目以降のパターンを表現する方法がお分かりの方がいましたらご教示下さい。
また、単純に目的を達成する正規表現とその置換文字列のセットでも構いません。
その場合は、注釈を入れて説明して頂けると助かります。
パターン
(-?\d{1,3}(,\d{3})*)円(-?\d+(.\d+)?)%
置換
"\1","\2"
ではどうでしょうか?
だだし、上記は秀丸の場合なので、お使いの環境によっては
\2ではなく、\3とか別の値になるかもしれません。
10番目以降のパターンを表現するには10という数字は使えないのでしょうか?
これは、環境というか、言語やライブラリに依存します。
一口に「正規表現」と言っても、微妙に違っています。
置換する文字の方にバックスラッシュを使っているということは、sed ですか?
いや、グループの指定にバックスラッシュが入らないから Perl ですしょうか。
Perl だったら、置換文字の方を "\10" ではなく "$10" と書くと、10番目のグループに当たる文字列に置換されます。
javascript も $ の後は 100 まで行けるのですが、古いIEだと微妙です。
スラッシュも引っかかっちまうけど。
(-?\d{1,3}(,\d{3})*)円(-?\d+(\.\d+)?)%
としないと意図しない結果になる場合がありえますので、訂正させて頂きたいと思います。