2012-04-24 13 views
1

私はurllib2.urlopenを使ってthisのようなサイトのソースコードを入手しています。 私はバイトを読んで、beautifulsoupを使ってアプレットとしてラベル付けされたコードを取得します。 ように、このコードは、行が含まれています。私はTIPO =「マクロ」dinamica/resortedinamica持つ値に含まれるコードにおけるすべての「expresión=」値をキャプチャする必要beautifulsoupとregextで検索する

<param name="G_00" value="espacio='E1' tipo='macro' expresi&oacute;n='dinamica/resorte'"> 

/マサ)。 beautifulsoupで

私はタグのようなラインのこれらの種類を特定するには、唯一のTIPOだけでなく、私は今、私はexpresión=の右側を探し、簡単にしたい=「マクロ」でタグ:

key_macro = ['expresión=', 'expresion=', 'expresi&oacute;n='....] # yes, a problem, it could be this way 
for y in key_macro: 
    if string.find(tag, y) != -1: 
     # sometimes -sorry- macros are in txt format: 
     mexpression = r"%s'([\w\./]+)'" % y 
     mpatron = re.compile(mexpression) 
     mresult = mpatron.search(tag['value']) 
     if mresult: # 1 
      macroslist.append(mresult.group(1)) 
     # sometimes without extension 
     wexpression = r"%s'([\w/]+)'" % y 
     wpatron = re.compile(wexpression) 
     wresult = wpatron.search(tag['value']) 
     if wresult: # 2 
      macroslist.append(wresult.group()) 

問題がある場合:もし存在すれば.txtファイルを取得する - 私は保証することができる#2(私は単語/単語を探す)私はdinamica/resorteとしてsomethingsを見つけられない、wresultは常に失敗し、私はこれらの値を取得する必要があります。

私の正規表現は悪いですか?すべての問題は、単語/単語を正規表現でどのように示すかです。

右側があることながら、私は... beautifulsoupで検索を試みたが、「マクロは」INSIDE値であり、私はこのタグをキャプチャする方法がわからない、とにかく+検索再(良い仕事をするように見えます。例えば、dinamica/resorte.txt、#1は動作しますが)、拡張子はありません。

お時間をいただきありがとうございます。

答えて

0

申し訳ありませんが、強引な愚かな解決策ですが、検索したいすべてのキーに関するニーズをよりよく指定する必要があります。私は個人的に解決策を良いとは考えていません。とにかく、試してみてください。

import re 

def brute_force_and_stupid(s, rex=re.compile(r"expresion='([a-zA-Z./]+)'")): 
    s = s.replace('&oacute;', 'o') 
    s = s.replace('ó', 'o') 
    print s 
    m = rex.search(s) 
    if m: 
     return m.group(1) 
    return None 

tag = "<param name=\"G_00\" value=\"espacio='E1' tipo='macro' expresi&oacute;n='dinamica/resorte'\">" 
print tag 
print brute_force_and_stupid(tag) 

をそれは私のコンソールに出力します:

c:\tmp\___python\Antonio\so10295276>python a.py 
<param name="G_00" value="espacio='E1' tipo='macro' expresi&oacute;n='dinamica/resorte'"> 
<param name="G_00" value="espacio='E1' tipo='macro' expresion='dinamica/resorte'"> 
dinamica/resorte 

、より複雑な正規表現とわずかに良い解決策。 (ここではUnicode文字列に注目してください。)

import re 

rex = re.compile(ur"expresi(o|ó|&oacute;)n='(?P<text>[a-zA-Z./]+)'") 

tag = u"<param name=\"G_00\" value=\"espacio='E1' tipo='macro' expresi&oacute;n='dinamica/resorte'\">" 
print tag 

m = rex.search(tag) 
if m: 
    print m.group('text') 
else: 
    print None  

それは出力します。

c:\tmp\___python\Antonio\so10295276>python b.py 
<param name="G_00" value="espacio='E1' tipo='macro' expresi&oacute;n='dinamica/resorte'"> 
dinamica/resorte 
+0

JA !,二アイデア((P [a-zA-Z./]+)はunicodeに変換するために見えます?パトロンとタグは以前は完璧に動作しているようです!私の悪い説明を残して申し訳ありません、あなたに努力していただきありがとうございます。はい、正規表現は頭痛を引き起こします。 – Antonio

関連する問題