###前提・実現したいこと
pythonで正規表現を使って文字列を取得しようとしています。
ーーーーーーーーーーーーーーーーーーーーーーー
ドンペリ【高級品】 1995年 5434
ロマネコンティ【高級品】更新 2001年 12990
ボルドー更新 1994年 4500
トゥレーヌ 2000年 21000
タヴェル【高級品】 1995年 5434
カシス【高級品】更新 2001年 12990
ガヤック更新 1994年 4500
アザー 1984年 11500
ーーーーーーーーーーーーーーーーーーーーーーー
上記のデータから商品名(ドンペリ、ロマネコンティ、ボルドー、トゥレーヌ、タヴェル、カシス、ガヤック)のみを正規表現で抽出したいです。
上記データの特徴は次の通りです。
・商品名 補足情報 発売年 価格の順番で並んでいる。
・補足情報は「【高級品】」「更新」の2種類で、片方だけ表示される場合、両方共表示される場合、両方共表示されない場合がある。
・価格は数字のみで単位は無い。
###発生している問題
商品名のみを取得したいにも関わらず、それ以外のデータも取得してしまう。
また、特定のデータではうまくいく正規表現も他のデータではうまくいかない。
###該当のソースコード
python3.5.2
1import re 2print(re.search("(.+)([【更0-9])", "ドンペリ【高級品】 1995年 5434").group(1))
###試したこと
print(re.search("(.+)([【更0-9])", "ドンペリ【高級品】 1995年 5434").group(1))
上記の正規表現では「ドンペリ【高級品】 1995年 543」が取得されてしまいました。
私の意図としては(.+)で商品名とマッチし、([【更0-9])で「【」か「更」か「数字」のどれかにマッチすればそこで正規表現での文字列取得が終了し、「ドンペリ」という文字列のみが取得される想定でした。
しかし、実際には([【更0-9])が一番最後の数字4とマッチしてしまい、(.+)は「ドンペリ【高級品】 1995年 543」とマッチしてしまいました。

回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。