0

私はこの行をページから取り出そうとしています:

                                            $ 55 326

数字を取得するためにこの正規表現を作成しました:

    player_info['salary'] = re.compile(r'\$ \d{0,3} \d{1,3}')

テキストを取得するときはbs4を使用し、テキストは「unicode」タイプです。

    for a in soup_ntr.find_all('div', id='playerbox'):
       player_box_text = a.get_text()
       print(type(player_box_text))

結果が出ないようです。私もこのような正規表現で試しました

    player_info['salary'] = re.compile(ur'\$ \d{0,3} \d{1,3}')
    player_info['salary'] = re.compile(ur'\$ \d{0,3} \d{1,3}', re.UNICODE)

しかし、私はデータを取得するために見つけることができません。私が読んでいるページには、次のヘッダーがあります。

    Content-Type: text/html; charset=utf-8

それを理解するための助けを期待してください。

4

2 に答える 2

3

re.compile何にも一致しません。正規表現のコンパイル済みバージョンを作成するだけです。

あなたはこのようなものが欲しいです:

matchObj = re.match(r'\$ (\d{0,3}) (\d{1,3})', player_box_text)
player_info['salary'] = matchObj.group(1) + matchObj.group(2)
于 2012-10-05T22:03:31.167 に答える
1

これは、正規表現を理解するのに適したサイトです。 http://txt2re.com/

#!/usr/bin/python
# URL that generated this code:
# http://txt2re.com/index-python.php3?s=$%2055%20326&2&1

import re

txt='$ 55 326' 
re1='.*?'   # Non-greedy match on filler
re2='(\\d+)'    # Integer Number 1
re3='.*?'   # Non-greedy match on filler
re4='(\\d+)'    # Integer Number 2

rg = re.compile(re1+re2+re3+re4,re.IGNORECASE|re.DOTALL)
m = rg.search(txt)
if m:
    int1=m.group(1)
    int2=m.group(2)
    print "("+int1+")"+"("+int2+")"+"\n"
于 2012-10-05T22:02:40.637 に答える