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 回答