

例えば、`●Ｎ◆ＸＹ時計` という文字列があるとき、文字`ＸＹ`は固定され、`●Ｎ◆`は記号問わず様々な文字、`時計`は様々な漢字やひらがなを取るとする。  
このとき、固定されている`ＸＹ`までの先頭の文字を削除したいです。

正規表現を使えばできそうな気がしているのですが、正規表現で削除する方法がわかりません。  
初歩的な質問かもしれませんが、ご教授のほどよろしくお願いいたします。


CC BY-SA 4.0
2022-09-18T07:21:12.407
91153
2022-09-20T21:17:00.827
2022-09-18T07:43:18.417
3060
30173
question
python python3 正規表現
正規表現を使用して、特定の文字の前の文字を削除したい


色々と検討しまして、下記のような正規表現で期待通りできたかもしれません。

[code]

    import re
    
    a = re.sub(r'^[^ＸＹ]*', '', '●Ｎ◆ＸＹ時計')
    
    print(a)
    
[/code]


CC BY-SA 4.0
2022-09-18T07:42:20.110
91154
2022-09-18T07:42:20.110
30173
91153
answer


wilwilco さんが自己回答されていますが、 `r'^[^ＸＹ]*'` では条件を満たしていないと思われます。  
「ＸまたはＹではない任意の文字列」を削除しているため、例えば、以下の様な結果になります。

[code]

    >>> re.sub(r'^[^ＸＹ]*', '', '●Ｎ◆ＹＹＸＹ時計')
    'ＹＹＸＹ時計'
    >>> re.sub(r'^[^ＸＹ]*', '', '●Ｎ◆ＹＹＹＸ時計')
    'ＹＹＹＸ時計'
    >>> re.sub(r'^[^ＸＹ]*', '', '●Ｎ◆Ｘ時計')
    'Ｘ時計'
    
[/code]

## 案1: 残したい文字列を指定し、キャプチャして使う

[code]

    >>> re.sub(r'^.*(ＸＹ.*)', r'\1', '●Ｎ◆ＸＹ時計')
    'ＸＹ時計'
    >>> re.sub(r'^.*(ＸＹ.*)', r'\1', '●Ｎ◆ＹＹＸＹ時計')
    'ＸＹ時計'
    >>> re.sub(r'^.*(ＸＹ.*)', r'\1', '●Ｎ◆Ｘ時計')
    '●Ｎ◆Ｘ時計'
    
[/code]

ＸＹで始まる任意の文字列をキャプチャして、 `r'\1'` で置換後の文字列として使っています。

## 案2: 肯定先読みを使う

[code]

    >>> re.sub(r'^.*(?=ＸＹ)', r'', '●Ｎ◆ＹＹＸＹ時計')
    'ＸＹ時計'
    >>> re.sub(r'^.*(?=ＸＹ)', r'', '●Ｎ◆ＸＹ時計')
    'ＸＹ時計'
    >>> re.sub(r'^.*(?=ＸＹ)', r'', '●Ｎ◆Ｘ時計')
    '●Ｎ◆Ｘ時計'
    
[/code]

`(?=...)` を使って、ＸＹの直前までを対象として、空文字列に置換しています。

## 補足

> `時計`は様々な漢字やひらがなを取る

私の回答にこの条件は含めていません。  
漢字とひらがな、以外のどんな文字でも許容しています。  
wilwilcoさんの回答も同様のため、今回はスルーしています。  
（漢字とひらがなにのみ一致する正規表現はちょっと面倒なのです）


CC BY-SA 4.0
2022-09-20T21:17:00.827
91201
2022-09-20T21:17:00.827
806
91153
answer