Pythonで正規表現を書いているんですが上手にマッチさせられません…。
下記のコード、果物と色の組み合わせをマッチさせたいのですが、思ったようにいきません……。
python3
1import re 2menu = ''' 3<item>りんご</item> 4 <price>120</price> 5<item>みかん</item> 6 <price>300</price> 7 <color>オレンジ</color> 8<item>ぶどう</item> 9 <price>400</price> 10 <color>むらさき</color> 11''' 12result = re.finditer(r'<item>(.+?)</item>.+?<color>(.+?)</color>' 13 ,menu 14 ,flags=re.DOTALL) 15for each in result: 16 print(each.groups())
↓こういう答えが返ってきてほしい
('みかん', 'オレンジ') ('ぶどう', 'むらさき')
↓実際に返ってくる答え(りんごはオレンジではない……)
('りんご', 'オレンジ') ('ぶどう', 'むらさき')
こういう風に戻ってくる原理はわかっているつもり(正規表現の中の丸括弧に入っていない .+?
がわたしの想定を超えて貪欲なのですよね)ですが、理想通りに変える方法が思い当たりません。
上から順になぞっていって、<color>タグを見つけたときに、さかのぼっていちばん近い<item>を見つけてもらえたらいいのですが……。
なお、上記はわかりやすくXMLみたいなものを書いているのですが、実際にわたしが取り組んでいるデータはこんな感じではない(Wikipediaのダンプデータ)ので、タグの階層関係などに依存しない方法があれば知りたいです。
Python 3.6.5
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/02/08 13:41
2020/02/09 09:37
2020/02/09 09:52