89537


`replace` 関数を用いて、複数の文章の置換をしたいのですが  
頓挫しておりどなたか詳しい方教えていただけますと幸いです。

### 目的

`msg` に二つ以上の文章を格納し、その文章の中で`正規表現01`に該当する文字列を`正規表現02`に置換したい。

### コード

以下のスクリプトを試しましたが、うまくいきません。

  * `置換したい文字列置換したい文字列`は実際には文章が入りますが、社内秘のためお見せすることができません。
  * 正規表現01に関しては`置換したい文字列置換したい文字列\n\n`に値する正規表現がこちらで準備ができているのでこの部分は教えていただかなくても大丈夫です。
  * `正規表現02`に関しては`置換したい文字列置換したい文字列\n\n! /item/0001\n\n`←こちらの文章が`/item/master/0001`のようになる正規表現になっています。

[code]

    import re
    
    msg = '置換したい文字列置換したい文字列\n\n! /item/0001\n\n,置換したい文字列置換したい文字列\n\n! /item/0002\n\n'
    
    pattern = re.compile(r'正規表現01')
    
    result = pattern.sub('正規表現02', msg)
    print(result)
    
[/code]


CC BY-SA 4.0
2022-06-22T05:57:43.897
89521
2022-06-23T03:32:20.770
2022-06-22T06:32:19.907
3060
52109
question
python python3 正規表現
Pythonのreplace関数で正規表現を用いて複数の文字列を変換する


質問の意図と合致しているかは自信がありませんが、以下のような結果となれば良いのでしょうか？

1.正規表現で合致した部分を抜き出す。  
2.その抜き出した部分の数字部分をそのまま利用する  
3.置換したパターンをもとの部分と置き換える。

ソースコード

[code]

    import re
    
    Sentence = '\n'.join(
        [
            'なまむぎ なまごめ なまたまご/item/0001\n\n',
            'すももも ももも もものうち/item/0001\n\n ももも すももも もものうち/item/0002\n\n',
        ]
    )
    
    print(Sentence)
    
    re_item = re.compile(r'/item/[\d]*\n\n')
    res = re_item.findall(Sentence)
    if res:
        items = list(set(res))
        for item in items:
            re_item = item
            item = item.replace("/item/","")
            item = item.replace("\n\n","")
            item = f'/item/master/{item}'
            Sentence = re.sub(re_item, item, Sentence)
    
    print(Sentence)
    
    
[/code]

出力結果

[code]

    なまむぎ なまごめ なまたまご/item/0001
    
    
    すももも ももも もものうち/item/0001  
    
     ももも すももも もものうち/item/0002 
    
    
    なまむぎ なまごめ なまたまご/item/master/0001
    すももも ももも もものうち/item/master/0001 ももも すももも もものうち/item/master/0002
    
[/code]


CC BY-SA 4.0
2022-06-23T03:32:20.770
89537
2022-06-23T03:32:20.770
32891
89521
answer