2012-10-05 5 views
0

내가 페이지에서 밖으로이 줄을 얻기 위해 노력하고 있어요 : 나는 숫자를 얻기 위해이 정규 표현식을 한파이썬 enconding 정규식 문제

          $ 55 326 

:

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

나는 내가 사용하는 텍스트를 얻을 때 bs4이고 텍스트의 형식은 '유니 코드'입니다.

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 

희망을.

답변

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" 
+0

을,하지만 난이 UTF-8/유니 코드의 처리를 실패라고 생각한다. 공백을 변경하면식이 데이터를 찾습니다. 나는 그것을 얻는 방법을 정말로 모른다. – jantzen05

+0

이것은 잘 동작하지만 00 $ cphCon과 같은 단어로 0 $ cp와 같은 다른 것들도 포착합니다. – jantzen05

+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) 
+0

죄송합니다 og 컴파일을 사용하여, 실제로 나중에 컴파일 된 버전을 사용하는 re.search 사용합니다. 제 문제는 올바른 인코딩으로 데이터를 가져올 수 없기 때문에 일부 데이터와 다른 데이터를 찾을 수 없다는 것입니다. – jantzen05

+0

당신의 요점을보십시오. 사실 re.search를 사용하고 있습니다. 먼저 표현식을 만든 다음 표현식을 사용하여 re.search를 호출합니다. – jantzen05