• ベストアンサー

秀丸での、正規表現を使った置換

秀丸での、正規表現を使った置換 \t第*.条*. (例えば「第1条」「第2条」「第3条」など) にマッチするものを、 \n第*.条*.\n のフォーマットに変換したいです。 しかし、変更後を「\n第*.条*.\n」でしていすると、 置換後の文字自体が、アスタリスクになってしまい、 例えば「第1条」「第2条」「第3条」などが、 すべて「第*.条」「第*.条」「第*.条」などになってしまいます。 数字部分を残しつつ置換するにはどうすればよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
noname#144013
noname#144013
回答No.4

こんにちは。 > 数字部分を残しつつ置換するにはどうすればよいでしょうか? 基本的には、検索文字列内の残したい部分を半角カッコ"()"で括っておき、 置換文字列で、タグ付き正規表現 (\1、\2など)で記述すれば良いです。 ※詳細は「秀丸エディタ」のヘルプをご覧下さい。 以下は、補足要求及び確認事項です。 1)ご提示の「正規表現」の文字列での、"*." は ".*" の間違いでは?   ・アスタリスク[*] とピリオド[.] の順番が逆だと思われます。 2)"第"と"条"の間の文字が、数字文字のみ(下記条件参照)の場合を   置換対象とするということですか? 上記の件も踏まえて、ご提示の置換条件を纏めると、 (一部、当方で勝手に設定した条件も含みます)  <置換対象の文字列の条件>  1)"第"の前にタブ[\t]があること。  2)"第"と"条"の間に以下の何れかの数字文字があること。    ・半角の数字文字(連続文字も含む)    ・全角の数字文字(連続文字も含む)    ・全角の漢数字文字(連続文字も含む)     ※但し、単位文字の"億"以上の文字(億、兆、京、・・・)は除く  3)"条"の後に文字があってもなくても置換対象とする。  <置換後の文字列の条件>  1)"第"の前のタブ[\t]を、改行文字(1文字)に置換する。  2)"条"の後の文字列(ない場合も含む)の後に、改行文字(1文字)を挿入する。 ということで宜しいでしょうか? 以上の条件で「正規表現」を表すと以下のようになると思います。 注)秀丸エディタでの「正規表現」とします。 ■正規表現での検索文字列&置換文字列(秀丸エディタ用) 検索文字列: \t(第[0-90-9一二三四五六七八九十零百千万]+条.*) 置換文字列: \n\1\n 以下は、上記の正規表現で置換を行った例です。 ■置換例 ※タブ文字は[\t]で表しています。 ※各行の先頭の番号は行番号を意味します。 <置換前> ============================================================ 01:第1条hoge1          //←置換対象外("第"の前にタブ[\t]がないため) 02: 03:\t\t第2条hoge2       //←置換対象 04: 05:abc\t第三十五条 hoge3  //←置換対象 06: 07:【第4条】hoge4        //←置換対象外("第"の前にタブ[\t]がないため) 08: 09:「\t第100条」 hoge5     //←置換対象 10: 11:\t第A条 hoge6        //←置換対象外("第"と"条"の間が数字でないため) 12: 13:\t第123条\t         //←置換対象 ============================================================ <置換後> ============================================================ 01:第1条hoge1      //←置換対象外(置換なし) 02: 03:\t 04:第2条hoge2      //←置換対象(置換後) 05: 06: 07:abc 08:第三十五条 hoge3  //←置換対象(置換後) 09: 10: 11:【第4条】hoge4     //←置換対象外(置換なし) 12: 13:「 14:第100条」 hoge5    //←置換対象(置換後) 15: 16: 17:\t第A条 hoge6     //←置換対象外(置換なし) 18: 19: 20:第123条\t       //←置換対象(置換後) 21 ============================================================ 上記例を踏み台にして、質問者さんの期待する結果になるように「正規表現」 をいろいろ弄って検証してみて下さい。 正規表現の詳細については、「秀丸エディタ」のヘルプをご覧下さい。 ※ヘルプ画面の検索ワードに"正規表現"と入れて検索してみて下さい。 以上です。

TeferiMage
質問者

お礼

まさにやりたいことを教えて頂く事ができて、とてもびっくりしました。 また、非常に詳しいご返答、とても嬉しいです&助かりました! 「タグ付き」というのがあったとは、気付きませんでした! ありがとうございました!

その他の回答 (3)

  • kmee
  • ベストアンサー率55% (1857/3366)
回答No.3

ところで \t第*.条*. は 「タブ」「第」が0個以上、任意の一文字、「条」が0個以上、任意の一文字 にマッチする正規表現ですが、これは意図したものですか? 例えば、 (タブ)第第第第第XV にもマッチします。 「第第第第第」が「第*」に 「X」が「.」に XとVの間のなにもないところが「条*」に 「V」が「.」に 対応します。

TeferiMage
質問者

お礼

ご指摘のパターン、全然気が付きませんでした。^^; 今回は、第の字がたくさんあるようなイレギュラーなデータを処理するわけではないので大丈夫です。 今後、このようなパターンに気付けるようになれそうです。 ありがとうございます。

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.2

補足要求 第*条の前に\tがありますが、これはタブになります。 タブで始まり、第*条の文字をどのようにされたいのでしょうか。 (タブで始まっていない第*条は無視してよいのでしょうか?) 最初の\nは、改行したということでしょうか。 最後の\nは、第*条・・・・の後に改行を更に付加したいと言うことでしょうか? 返還前の文字と 変換後の期待する結果を記述されると、もっと良い回答が得られるかと思います。

TeferiMage
質問者

お礼

タブは、変換したいということです。 > 返還前の文字と > 変換後の期待する結果を記述されると、もっと良い回答が得られるかと思います。 ご指摘ありがとうございます。 今後、よりよい質問の仕方ができそうで、とてもありがたい&嬉しいです!

  • D-Matsu
  • ベストアンサー率45% (1080/2394)
回答No.1

ヘルプの「検索系コマンド」→「正規表現」→「\1 \2~」を読んでください。

TeferiMage
質問者

お礼

ありがとうございます! 読んでみます。

関連するQ&A

  • 秀丸の置換で正規表現を使う方法を教えてください

    お世話になります 秀丸エディタの置換を用いて、 (’.ab12#-cd’)のような文字列や数字、記号のまじった ( )から( )の中身を検索置換して (’’)にしたいと考えています。 具体例 (’.ab12#-cd’) (’.ab#37-c’) (’..ab-82#d%’) (’.12jg+#ppv’) (’.ab12lentext’)から ↓ (’’)に置換したい。 秀丸を使うときはあっても単純な 一文字程度の検索置換しかおこなったことがなく どうにも方法がうかばなかったところ 友人から、正規表現というものを 使えば実現できるようだと聞きました。 友人も残念ながら、プログラミングの経験は あまりなくて正規表現での記述方法は わからないいうことでした。 正規表現を使ってこれを実現する方法を 教えていただけませんでしょうか よろしくお願いいたします

  • 秀丸での正規表現を使用した置換

    いつもお世話になっております。 秀丸で正規表現を使用した置換処理を行いたいと思うのですが、どうしても正規表現の式が書けません。 どうかご教示下さい。 <置換前> ABC1 あAbCd++ ... ... ・先頭4文字は半角英数字の大文字固定 ・その後ろにタブ ・最後にかな、英数字、記号などの可変長の文字列 上記で1レコードです。 <置換後> ABC1 String 内容 あAbCd++ ... ... ・先頭4文字そのまま ・その後ろにタブを3つ+改行 ・続いて「内容」という文字列+改行 ・最後に可変長の文字列をそのまま+改行 「置換」の正規表現は以下だと思うのですが、英数字4文字と可変長文字列を別々にマッチさせる「検索」がどうしても分かりません。 \0 String\n内容\n\1\n どうかご教示下さい。 <環境> Ver.6.1.4

  • 秀丸で正規表現を使って置換

    あるファイルに関して、このような置換を行いたいです。 abc/xxx,yyy,zzz.html ↓ abc/xxx.html xxxとyyyとzzzはある任意の文字列(英数字で文字数はばらばら)で 「abc/」と「,」と「.html」は固定の文字列になります。 そこで、秀丸で開いて、正規表現による検索で、 「abc/.*,.*,.*.html」 として検索すると、該当部分が検索できることがわかりましたが、置換後をどのように設定すればいいのかわかりません。 置換後のabc/xxx.htmlの「xxx.html」の部分は検索前の任意の文字列をそのまま残したいのです。 秀丸の置換機能でこのようなことは可能でしょうか? 正規表現に関してあまり詳しくないので教えてください。

  • (秀丸)正規表現で、""をマッチさせるには?

    お世話になります。 以下2行に、それぞれマッチさせて、 末尾の""(ダブルコーティション)を外して置換えしたいです。 1-234,漢字,ABC,123円,"789" 1-234,漢字,ABC,"1,234円","789" 秀丸の正規表現 検索  ^(([^,]?)*),(([^,]?)*),(([^,]?)*),(([^,]?)*),"((.?)*)"$ 置換  \1,\2,\3,\4,\5 で試したところ、 1-234,漢字,ABC,123円,"789" では、マッチして、 1-234,漢字,ABC,123円,789 と置換されて結果OKでした。 しかし、 1-234,漢字,ABC,"1,234円","789" の方ではマッチしませんでした。 そこで質問させていただきますが、 1-234,漢字,ABC,"1,234円","789" でマッチするようにする為には、 上記しました秀丸の正規表現(検索)を、 どのように変更すればよろしかったでしょうか? 以上になります。 宜しくお願いいたします。

  • 正規表現で一括置換

    現在、数多くの長文データを、テキストエディタの置換機能で一括置換しています。 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の複数一括置換でこれをなんとかしたいのです。ご存じの方、どうぞ教えてください。よろしくおねがいします! 秀丸エディタをご利用で、正規表現にくわしい方も、ぜひヒントを出していただければと思います。

  • 秀丸で正規表現による置換

    正規表現でつまずいてしまったので教えてください。 こういうデータがあったとして ,,E,77774000,1,77770004480,〇〇〇,0,,,,,l_ ,,E,77774000,13,77770004479,〇〇〇,0,,,,,l_ ,,E,77774000,21,77770004478,〇〇〇,0,,,,,l_ ,,E,88884000,5,88880004480,〇〇〇,0,,,,,l_ ,,E,88884000,14,88880004479,〇〇〇,0,,,,,l_ ,,E,88884000,20,88880004478,〇〇〇,0,,,,,l_ 6列目に77770004480があったら、5列目の1を10にする。 6列目に88880004480があったら、5列目の5を10にする。 という事がしたいのですが、7777や8888の部分は必ず数字4桁で固定ですが、 実際には0000-9999まであるため、1万回置換するのは面倒です。 そこで、0004480があったら、ヒットする1や5を10に置き換える事がしたいのですが どのようにしたらいいでしょうか? また、12を2に置き換えることもあるので、5列目は 必ず数字ですが、1桁または2桁となります。 正規表現置換で使用するエディタは、秀丸です。 ,,E,77774000,1,77770004480,〇〇〇,0,,,,,l_ ↓ ,,E,77774000,10,77770004480,〇〇〇,0,,,,,l_ ,,E,88884000,5,88880004480,〇〇〇,0,,,,,l_ ↓ ,,E,88884000,10,88880004480,〇〇〇,0,,,,,l_ 以上よろしくおねがいいたします

  • 秀丸の正規表現

    秀丸の正規表現 http://pc.dearie.jp/hidemaru/replace/14.html 上記URLでメールの正規表現について解説があります。 [A-Za-z0-9\-\.\_]+@[A-Za-z0-9\-\_]+\.[A-Za-z0-9\-\.\_]+ この正規表現でメールの検索をおこなっています。この正規表現は理解出来ます。 .*([a-z0-9\-\.\_]+@[a-z0-9\-\_]+\.[a-z0-9\-\.\_]+)([^a-z0-9@\.\-\_]+).* キャプチャを使って正規表現でメールアドレスをマッチしているのは理解できます。 なぜ置換で、「\1,」とやっても、メールアドレスのみを取得できないのでしょうか? 実際に秀丸エディタを使ってやってみましたが、メールアドレスのみ取得することができませんでした。 検索ではメールアドレスにマッチするのに、なんでキャプチャが正しく動かないのかがわかりません・・・

  • 秀丸の正規表現を使って置換

    三番目の引数が0かNULL、nullならば、以下のように秀丸で置換したいのですが、やり方がわかりません。正規表現を使って置換したいです。 abcmethod(aaa, bbb, 0, ccc)やabcmethod(aaa, bbb, null, ccc)    ↓↓↓↓↓↓ abcmethod(aaa, bbb, ccc) aaa,bbb,cccは任意の文字半角アルファベットや数値です。 abcmethod(.+,.+,.+,.+)で、検索できますが、置換の仕方がわかりません。 どうぞよろしくお願いします。

  • 秀丸の置換で数字で始まる行だけを残したい

    秀丸の置換で数字で始まる行を残したいのですが可能でしょうか? 正規表現にチェックを入れて 検索に ^[0-9].*\n 置換に 空白 で数字で始まる行のみを消せることは分かったのですが、逆に数字で始まる行のみを残す方法がわからず、ご質問申し上げました。

  • 秀丸での正規表現

     秀丸エディタVersion 7.11、HMJRE.DLL V1.92 を使用しています。  下記上のような4行のテキストファイルから、数字以外で始まる行を空行に置換しようと思い、検索文字列を「^[^0-9].*」、置換文字列を「」(なし)に設定したのですが、3行目のx だけからなる行は削除されませんでした(下記下のようになりました。このとき、カーソルは変換後の2行目の一番左のx の右側にあります)。 置換前 >11111 > >xxxxx >[EOF] 置換後 >11111 >xxxxx カーソルは左端のx の右側 >[EOF]  11111 とxxxxx の間にもう1行空行を入れると、所望の動作となります。  正規表現の指定が間違っているのでしょうか。

専門家に質問してみよう