93658


以下の「処理前」のテキストから、「処理後」のように `D-E-F` から `G-H-I` の前までを指定し削除を行いたいです。

## 処理前

[code]

    A-B-C;hogehogehoge
    D-E-F;fugafugafuga
          piyopiyopiyo
    G-H-I;hogerahogera
    
    A-B-C;HOGEHOGEHOGE
    D-E-F;FUGAFUGAFUGA
          PIYOPIYOPIYO
    G-H-I;HOGERAHOGERA
    ・
    ・
    ・
    
[/code]

## 処理後

[code]

    A-B-C;hogehogehoge
    G-H-I;hogerahogera
    
    A-B-C;HOGEHOGEHOGE
    G-H-I;HOGERAHOGERA
    ・
    ・
    ・
    
[/code]

[Yahoo!知恵袋の投稿](https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13108148098)を参考に、`A-B-C`と`G-H-I`をグループ化し以下のように記述したのですが、「見つかりません」と表示されてしまいます。

[code]

    検索する文字列：(A-B-C)[^(G-H-I)]*(G-H-I)
    置換後の文字列：\r\nG-H-I
    
[/code]

検索対象が文字単体の場合は動作するのですが、文字列を単純にグループ化するだけでは不十分なのでしょうか。

この場合、どのように記述するのが適切なのかご教授いただきたいです。

使用ソフトはMeryテキストエディタです。


CC BY-SA 4.0
2023-02-01T00:34:07.367
93646
2023-03-26T02:22:18.077
2023-02-01T07:55:01.970
3060
56030
question
正規表現 エディタ
エディタを使用し、正規表現で特定の文字列から特定の文字列までを指定し削除したい


「Mery テキストエディタ」を使ったことがないので御参考になりますが，Python の記述例を示します（処理前のテキスト: `temp.txt`）。  
正規表現で最長一致ではなく最短一致させるには `*` の代わりに `*?` （`+?` `??`
等も同様）を使います。また，削除したい部分に改行も含まれるので `.` の代わりに `[\s\S]`
（空白文字または空白文字以外の全ての文字）を使う必要があります。

[code]

    import re
    
    with open('temp.txt', 'r') as f:
        before = f.read()
    
    after = re.sub(r'(A-B-C.*\n)[\s\S]*?(G-H-I)', r'\1\2', before)
    print(after, end='')
    
[/code]

[code]

    A-B-C;hogehogehoge
    G-H-I;hogerahogera
    
    A-B-C;HOGEHOGEHOGE
    G-H-I;HOGERAHOGERA
    
[/code]

（追記）  
Mery では `\S` が使えないようなので，代わりに `[^\s]` を使って `[\s\S]` を `(\s|[^\s])`
と書けば置換できました。なお，かっこを増やしたので置換後も `\1\3` とする必要があります。

[![置換の設定画面](https://i.stack.imgur.com/fELWh.png)](https://i.stack.imgur.com/fELWh.png)


CC BY-SA 4.0
2023-02-01T07:33:39.023
93658
2023-02-07T06:19:59.900
2023-02-07T06:19:59.900
54588
54588
93646
answer


> 正規表現が使えるエディタであればどんなものでも

**VS Codeでの場合:**

VS Codeによる 複数行にまたがる検索では `\n`を明示的に指定する必要があるようです  
なので, `D-E-F` から `G-H-I` の前までは

検索文字列: `^D-E-F(.*\n)*?(?=G-H-I)`

※  
~~後読みアサーション指定のつもりが有効にならず, 先読みアサーションでヒットした~~  
(置換文字列を `G-H-I` にするのなら, 先読みアサーションにする必要はない)


CC BY-SA 4.0
2023-03-25T17:19:59.577
94317
2023-03-26T02:22:18.077
2023-03-26T02:22:18.077
43025
43025
93646
answer