人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

正規表現の置換について質問です。
例えば、
「-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番目以降のパターンを表現する方法がお分かりの方がいましたらご教示下さい。

また、単純に目的を達成する正規表現とその置換文字列のセットでも構いません。
その場合は、注釈を入れて説明して頂けると助かります。

●質問者: しゅうすけ
●カテゴリ:コンピュータ ウェブ制作
○ 状態 :終了
└ 回答数 : 2/2件

▽最新の回答へ

1 ● 空腹おやじ
●900ポイント ベストアンサー

パターン
(-?\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 と変えてみてどうなるのか試すことも出来るかと思います。 汎用的なものであれば [https://rubular.com/:title] [http://okumocchi.jp/php/re.php:title] とか、いろいろと便利なサイトがあるので試してみてはいかがでしょうか?

2 ● a-kuma3
●100ポイント

10番目以降のパターンを表現するには10という数字は使えないのでしょうか?

これは、環境というか、言語やライブラリに依存します。
一口に「正規表現」と言っても、微妙に違っています。

置換する文字の方にバックスラッシュを使っているということは、sed ですか?
いや、グループの指定にバックスラッシュが入らないから Perl ですしょうか。

Perl だったら、置換文字の方を "\10" ではなく "$10" と書くと、10番目のグループに当たる文字列に置換されます。
javascript も $ の後は 100 まで行けるのですが、古いIEだと微妙です。


しゅうすけさんのコメント
こちらでは、Notepad++を使用しています。
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ