python编码正则表达式问题

时间:2012-10-05 21:56:40

标签: python regex google-app-engine

我正试图从一个页面中删除这一行:

                                            $ 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

希望得到一些帮助来解决这个问题。

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分: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"