例えば、
「-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とか別の値になるかもしれません。
パターン
(-?\d{1,3}(,\d{3})*)円(-?\d+(.\d+)?)%
置換
"\1","\2"
ではどうでしょうか?
だだし、上記は秀丸の場合なので、お使いの環境によっては
\2ではなく、\3とか別の値になるかもしれません。
ありがとうございます。こちらの環境では、
"\1","\3"
でうまく置換できました。
この場合、\1は最初の大まかなカッコ(-?\d{1,3}(,\d{3})*)を表わし、\3は(-?\d+(.\d+)?)を表わすという事でしょうか?
入れ子になったカッコの、(,\d{3})や、(.\d+)はどのように表現されるのでしょうか?
ちなみに、Notepad++を使用しています。
カッコの中のサブカッコがどのように表現されているかご教示頂けましたら、ベストアンサーとして終了させて頂きます。
使う環境によって変わってくる場合があるので、使用している環境のヘルプを調べるのが確実かと思います。
また、実行環境があるようですので、ご自分で置換の部分を
\1
\2
\3
\4
と変えてみてどうなるのか試すことも出来るかと思います。
汎用的なものであれば
no title
正規表現チェッカー PHP: preg_match() / JavaScript: match()
とか、いろいろと便利なサイトがあるので試してみてはいかがでしょうか?
10番目以降のパターンを表現するには10という数字は使えないのでしょうか?
これは、環境というか、言語やライブラリに依存します。
一口に「正規表現」と言っても、微妙に違っています。
置換する文字の方にバックスラッシュを使っているということは、sed ですか?
いや、グループの指定にバックスラッシュが入らないから Perl ですしょうか。
Perl だったら、置換文字の方を "\10" ではなく "$10" と書くと、10番目のグループに当たる文字列に置換されます。
javascript も $ の後は 100 まで行けるのですが、古いIEだと微妙です。
こちらでは、Notepad++を使用しています。
ありがとうございます。こちらの環境では、
2019/03/20 18:41:55"\1","\3"
でうまく置換できました。
この場合、\1は最初の大まかなカッコ(-?\d{1,3}(,\d{3})*)を表わし、\3は(-?\d+(.\d+)?)を表わすという事でしょうか?
入れ子になったカッコの、(,\d{3})や、(.\d+)はどのように表現されるのでしょうか?
ちなみに、Notepad++を使用しています。
カッコの中のサブカッコがどのように表現されているかご教示頂けましたら、ベストアンサーとして終了させて頂きます。
使う環境によって変わってくる場合があるので、使用している環境のヘルプを調べるのが確実かと思います。
2019/03/20 21:34:17また、実行環境があるようですので、ご自分で置換の部分を
\1
\2
\3
\4
と変えてみてどうなるのか試すことも出来るかと思います。
汎用的なものであれば
no title
正規表現チェッカー PHP: preg_match() / JavaScript: match()
とか、いろいろと便利なサイトがあるので試してみてはいかがでしょうか?