扱う文字列の 3 つの異なるタイプを示すことから始めましょう。
"<h1>Money Shake</h1><p>Money<br>Money<br>MORE MONEY</p><p>Take money and stuff in blender.</p><p>Blend.</p>"
"<h1>Money Shake</h1><p>Posted by Gordon Gekko</p><p>Money<br>Money<br>MORE MONEY</p><p>Take money and stuff in blender.</p><p>Blend.</p>"
"<h1>Money Shake</h1><p>Posted by Gordon Gekko</p><p>They're great</p><p>Yield: KA-CHING</p><p>Money<br>Money<br>MORE MONEY</p><p>Take money and stuff in blender.</p><p>Blend.</p>"
基本的に、私がやりたいことは、成分を持つチャンクを切り取ることです:
"<p>Money<br>Money<br>MORE MONEY</p>"
これは私が使用している正規表現です:
re.search(r'<p>[^</p>](.*)<br>(.*?)</p>', string, re.I)
1 番目と 2 番目の文字列でこれを使用すると、目的どおりに動作し、次の一致オブジェクトが返されます。
"<p>Money<br>Money<br>MORE MONEY</p>"
しかし、これを 3 番目の文字列で使用すると、次の一致オブジェクトが返されます。
"<p>They're great</p><p>Yield: KA-CHING</p><p>Money<br>Money<br>MORE MONEY</p>"
私は何を台無しにしていますか?
@ブレンダー
こんにちはブレンダー、これは私が欲しいチャンクをつかむために思いついたものです。もっと良い方法があると確信していますが、私が Python / プログラミングを始めて 2 週間になることを考慮してください。
def get_ingredients(soup):
for p in soup.find_all('p'):
if p.find('br'):
return p
ingredients = get_ingredients(soup)
p_list = soup.find_all('p')
ingredient_index = p_list.index(ingredients)
junk = []
junk += p_list[:ingredient_index]
instructions = []
instructions += p_list[ingredient_index+1:]