python3 正規表現 指定範囲内の文字列抽出


変数aと変数bの間に含まれている文字列を最初にマッチしたところで取り出したいのですが、うまくいきません。以下のように書いてみたのですが最後の変数ｂまでの範囲を取得してしまい、期待する出力を得られませんでした。どうすれば解決するでしょうか。

[code]

    a = '<a>'
    b = '<b>'
    
    text = '<a>bbb<b>ccc<b>'
    r = re.search(r'%s(.*)?%s'%(a,b), text)
    
    print(r.group(1))
    
[/code]

出力結果

[code]

    bbb<b>ccc
    
[/code]

期待する出力

[code]

    bbb
    
[/code]




`(.*)?`では`(.*)`があるかないか、の意味になってしまいます。`(.*?)`とすべきでしょう。ただそれよりは確実に含まれない文字で判定した方がいいです。例えば`([^<]*)`とか。




`(.*)?`では`(.*)`があるかないか、の意味になってしまいます。`(.*?)`とすべきでしょう。ただそれよりは確実に含まれない文字で判定した方がいいです。例えば`([^<]*)`とか。

