dポイントプレゼントキャンペーン実施中!

現在、数多くの長文データを、テキストエディタの置換機能で一括置換しています。
jeditX(または秀丸エディタ)の正規表現をもちいた複数一括置換について質問させていただきます。

私は正規表現やPC言語の初心者です。どうぞよろしくお願いいたします。
かなり困り果てております。どうぞ、正規表現にくわしいかた、よろしくお願いします。

一二三『一二三にそれぞれ♪マーク』

という文章に対して

一♪二♪三♪

という一括置換をすることには成功しました。
こう書いています。

■検索文字列
(.{1,1})(.{1,1})(.{1,1})『(.{1,1})(.{1,1})(.{1,1})にそれぞれ♪マーク』
■置換文字列
\1♪\2♪\3♪

これでぶじ、以下のように一括置換できました。

一♪二♪三♪

現実には傍点や圏点をふっているんですが、判りやすく♪マークにしています。
この調子で長い文章も変換できていて満足していたのですが……

しかし代入文字が10個以上になったとたんに、まったく動きません。

■置換したい文章
一二三四五六七八九十『一二三四五六七八九十にそれぞれ♪マーク』

■検索文字列
(.{1,1})(.{1,1})(.{1,1})(.{1,1})(.{1,1})(.{1,1})(.{1,1})(.{1,1})(.{1,1})(.{1,1})『(.{1,1})(.{1,1})(.{1,1})(.{1,1})(.{1,1})(.{1,1})(.{1,1})(.{1,1})(.{1,1})(.{1,1})にそれぞれ♪マーク』
■置換文字列
\1♪\2♪\3♪\4♪\5♪\6♪\7♪\8♪\9♪\10♪

こうやると、置換後の文章は以下のようになってしまいます。

一♪二♪三♪四♪五♪六♪七♪八♪九♪一0♪

10個目以降の数字が、正しく機能してくれません。

\10 
という正規表現の書き方は
「一番目の値を参照して、それから数字の0を記入しなさい」
という意味になってしまうようです。
わたしは十番目の値を代入してほしいだけなんです。

\1 や \2 や \3 といった代入文字のように
\10 や \11 を機能させる、正しい表記をご教授ください。よろしくお願いいたします。

ちなみに以下のように書いてもダメでした……。
\1\0

グーグルで1日中検索しても判りませんでした。jeditXの複数一括置換でこれをなんとかしたいのです。ご存じの方、どうぞ教えてください。よろしくおねがいします!

秀丸エディタをご利用で、正規表現にくわしい方も、ぜひヒントを出していただければと思います。

A 回答 (4件)

秀丸に特化した正規表現ライブラリでなくて、


PCREや鬼車系の正規表現を使えば名前付きキャプチャが
できるので問題は解決できそうですが、
秀丸の制限でキャプチャは9個までと決まっているので、
外部プログラムを使うしか方法は無さそうです。

したがって、秀丸でサポートしてもらうか、
9個以下に分割して置換するか、PHP Perl Python Rubyといった
名前付きキャプチャが使える外部ツールで置換する、
ことになると思います。

参考URL:http://homepage3.nifty.com/_htom/macro/macro_dll …
    • good
    • 0

いえ、正規表現はこの様に書きます。


([一二三四五六七八九十])

\1?

元の文章が
一二三四五六七八九十の数が三個あるとき
であるとき、個や本が繫がっているときは変えたくなけりゃ
([一二三四五六七八九十])([^個本])

\1\2
とすれば
一?二三?四五?六七?八九?十の数が三個あるとき

なります。私はEmEditor(pro http://jp.emeditor.com/ )ですからファイルを開かなくてもフォルダー内、サブフォルダー内のファイルを一括して置換できます。フリー版は開いたファイルのみ。
最低限、POSIX の拡張正規表現( http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F% … )は身につけておくと良いでしょう。
 もちろん、より高度な正規表現はPerl( http://ja.wikipedia.org/wiki/%E6%AD%A3%E8%A6%8F% … )を使うほうが良いです。
    • good
    • 0

正規表現


([一二三四五六七八九十])

置換文字
\1♪

でいいのでは。
    • good
    • 0

Jedit X は、Macのアプリでよろしいですね?



ヘルプの 「7.5 正規表現について」には
> Jedit Xで搭載している正規表現エンジンは、oniguruma という最新最強の正規表現エンジンです。
とあります。

> (?<name>式) 名前付き捕獲式集合
とはあるのですが、手許の2.37では、名前付きは使えないようです。その代わり、
> 後で\1や\2などの番号で参照できるようになると同時に、\g<name> という名前でも参照できるようになります。
とあったので、\gによる参照は可能では?と考え、置換文字列を
> \1♪\2♪\3♪\4♪\5♪\6♪\7♪\8♪\9♪\g<10>♪
としたところ、うまく動作しました。


ちなみに、検索文字列ですが

.{1,1} を大量に使ってますが、これは . と等価です。
→ (.)(.)(.)(.)(.)(.)(.)(.)(.)(.)『(.)(.)(.)(.)(.)(.)(.)(.)(.)(.)にそれぞれ♪マーク』
また、後半は後で使う訳では無いし、グループになっているわけでも無いので、()は不要です
→ (.)(.)(.)(.)(.)(.)(.)(.)(.)(.)『..........にそれぞれ♪マーク』
同じ表現が繰り返されているときこそ、{}の出番です
→ (.)(.)(.)(.)(.)(.)(.)(.)(.)(.)『.{10}にそれぞれ♪マーク』

> #2,#3
おそらく、後半の『一二三四五六七八九十にそれぞれ♪マーク』のある行だけ処理し、かつ、この文言を消したい、ということでしょうから、その方法では不適切かと思われます。


Perlかなんかで、変換スクリプト書くのが汎用的に使えて楽だと思った。
if( s/(.+)『.*にそれぞれ(.)マーク』/$1/ ) { $m=$2; s/(.)/$1$m/g ;}
みたいなの。
    • good
    • 0
この回答へのお礼

macのJeditXでできました! 丁寧に教えていただきありがとうございます。

お礼日時:2013/07/17 23:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!