重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

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

\t第*.条*.
(例えば「第1条」「第2条」「第3条」など)
にマッチするものを、
\n第*.条*.\n
のフォーマットに変換したいです。

しかし、変更後を「\n第*.条*.\n」でしていすると、
置換後の文字自体が、アスタリスクになってしまい、
例えば「第1条」「第2条」「第3条」などが、
すべて「第*.条」「第*.条」「第*.条」などになってしまいます。

数字部分を残しつつ置換するにはどうすればよいでしょうか?

A 回答 (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
============================================================

上記例を踏み台にして、質問者さんの期待する結果になるように「正規表現」
をいろいろ弄って検証してみて下さい。

正規表現の詳細については、「秀丸エディタ」のヘルプをご覧下さい。
※ヘルプ画面の検索ワードに"正規表現"と入れて検索してみて下さい。

以上です。
    • good
    • 0
この回答へのお礼

まさにやりたいことを教えて頂く事ができて、とてもびっくりしました。

また、非常に詳しいご返答、とても嬉しいです&助かりました!
「タグ付き」というのがあったとは、気付きませんでした!

ありがとうございました!

お礼日時:2010/10/05 23:00

ところで


\t第*.条*.

「タブ」「第」が0個以上、任意の一文字、「条」が0個以上、任意の一文字
にマッチする正規表現ですが、これは意図したものですか?

例えば、
(タブ)第第第第第XV
にもマッチします。
「第第第第第」が「第*」に
「X」が「.」に
XとVの間のなにもないところが「条*」に
「V」が「.」に
対応します。
    • good
    • 0
この回答へのお礼

ご指摘のパターン、全然気が付きませんでした。^^;

今回は、第の字がたくさんあるようなイレギュラーなデータを処理するわけではないので大丈夫です。

今後、このようなパターンに気付けるようになれそうです。
ありがとうございます。

お礼日時:2010/10/05 22:57

補足要求


第*条の前に\tがありますが、これはタブになります。
タブで始まり、第*条の文字をどのようにされたいのでしょうか。
(タブで始まっていない第*条は無視してよいのでしょうか?)
最初の\nは、改行したということでしょうか。
最後の\nは、第*条・・・・の後に改行を更に付加したいと言うことでしょうか?

返還前の文字と
変換後の期待する結果を記述されると、もっと良い回答が得られるかと思います。
    • good
    • 0
この回答へのお礼

タブは、変換したいということです。

> 返還前の文字と
> 変換後の期待する結果を記述されると、もっと良い回答が得られるかと思います。

ご指摘ありがとうございます。
今後、よりよい質問の仕方ができそうで、とてもありがたい&嬉しいです!

お礼日時:2010/10/05 22:55

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

    • good
    • 0
この回答へのお礼

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

お礼日時:2010/10/05 22:54

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