リストを用いた正規表現


条件付きでリストの要素にマッチする文字列を消去したいのですが、その際に正規表現の書き方がわかりません。

路線名から社名を除外したいのですが、たまに路線名と社名が一致してしまう例外があります。例えば、「京王井の頭線」、「京王線」という文字列がある場合、「井の頭線」「京王線」という文字列にしたいのですが、私が書いた以下の正規表現では「京王線」が「線」になってしまいます。

[code]

    li = ["東急", "東京メトロ", "西武", "都営", "小田急", "京王", "東武"]
    a = "京王線"
    
    combined = "(" + ")|(".join(li)+ ")"
    a_new = re.sub(combined, "", a)
    a_new
    
    >>> '線'
    
[/code]

したがってリストの要素の文字列の直後に「線」という文字がある場合は消去しないという正規表現を書きたいです。以下の正規表現で特定できると思うのですが、これをリストを用いた正規表現にどう応用すれば良いのかわかりません。もしくは他に良い方法があれば、どなたか教えていただけますでしょうか。

[![画像の説明をここに入力](https://i.stack.imgur.com/2fsZ9.png)](https://i.stack.imgur.com/2fsZ9.png)




期待されているのはこんな感じかな？

[code]

    #combined = "(" + ")|(".join(li)+ ")"
    combined = "(?!線)|".join(li)+"(?!線)"
    
[/code]




期待されているのはこんな感じかな？

[code]

    #combined = "(" + ")|(".join(li)+ ")"
    combined = "(?!線)|".join(li)+"(?!線)"
    
[/code]

