0

次の文字列があるとします。

string = "** Hunger is the physical sensation of desiring food.                                      

<br>         Your Hunger Level: Very Hungery<br> Food You Crave: Tomato<br/><br/>"

「あなたの空腹」と「トマト」を抽出できるようになりたいです。どのような特殊文字が挿入されても、"Your Hunger Level:" と "Food You Crave" は常に一定であることがわかっています。

"Your Hunger Level:" could be: "Very Hungry", "Hungry", "Not So Hungry"
"Food You Crave:" could be: "Tomato", "Rice and Beans", "Corn Soup"

これを一致させるために正規表現を使用するにはどうすればよいですか? 私は次のことを試しましたが、運がありません...

m = re.match('(.*)([ \t]+)?Your Hunger Level:([ \t]+)?(?P<hungerlevel>.*)(.*)Food You Crave:([ \t]+)?(?P<foodcraving>.*).*', string)                

注: 文字列には、以下に示す多くのエスケープ文字が含まれているようです。

string = "** Hunger is the physical sensation of desiring food. <br>\n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\tYour Hunger Level:
Very Hungry \n\t\t\t\t\t\t\t\t<br>\n\t\t\t\t\t\t\t\tFood You Crave: Tomato \n\t\t\t\t\t\t</br>"
4

3 に答える 3

3

私は行きます:

print [map(str.strip, line.split(':')) for line in re.split('<.*?>', string) if ':' in line]
# [['Your Hunger Level', 'Very Hungery'], ['Food You Crave', 'Tomato']]

または、次のようにすることもできますdict

lookup = dict(map(str.strip, line.split(':')) for line in re.split('<.*?>', text) if ':' in line)
print lookup['Your Hunger Level']
# 'Very Hungry'
于 2012-10-29T20:46:12.180 に答える
2

私はあらゆる種類のパーサーを使用することに間違いなく同意しますが、次のように動作するようです。それは単にあなたのターゲット単語の後に始まり、それがヒットするまで続きます<(私は記録のためにそれを支持しませんが、うまくいけばうまくいきます:)):

In [28]: import re

In [29]: s = """** Hunger is the physical sensation of desiring food.
<br>         Your Hunger Level: Very Hungery<br> Food You Crave: Tomato<br/><br/>"""

In [31]: m = re.search(r'Your Hunger Level:([^<]*)<br>.*Food You Crave:([^<]*)', s)

In [32]: m.group(1).strip()
Out[32]: 'Very Hungery'

In [33]: m.group(2).strip()
Out[33]: 'Tomato'

文字列のstrip()設定が何であるかはわかりませんが、これは保守的であるため、コロンとテキストの間にスペースがない場合を処理します。また、Python キーワードを変数名 (stringこの場合は ) として使用しないことをお勧めします - 長期的には物事が簡単になります :)

于 2012-10-29T20:38:54.317 に答える
0
  1. まず、パーサーで HTML を解析します。美しいスープやlxmlなど、自由に使えるものがたくさんあります。
  2. 次に、ドキュメントで<br>タグを検索します。
  3. 3 番目に、必要なテキストのタグのテキストを検索し、そのタグを返します。
于 2012-10-29T20:33:44.677 に答える