2011-01-24 8 views
0

私はマッチング機能を書いています、と私は試合の最初のオカレンスだけを返すことができるかどうかを疑問に思っての単一のインスタンスを返します。は、正規表現オブジェクトの内容

def file_match(line, url): 
    allmatches = re.search(r'<a href="(?P<url>.*?)"', line) 
    if allmatches and allmatches.groupdict()['url'] == url: 
     return allmatches.groupdict()['url'] 
    else: 
     return None 

誰もが経験を持っています。ここに私のコードは、私は、単一のマッチを選択しようとする前にこれは...(指定された行のURLのすべてのインスタンスだけでなく、最初に一致している)でありますこの特定の問題? 正規表現オブジェクトを使って '.sub'メソッドを使うことを勧めましたが、このメソッドの引数に何を使用しているのかは分かりません。私はいくつかのことを試しましたが、すべてエラーになります。ここで

は、1(失敗)の一例であるしようとします。

def file_match(line, url): 
    allmatches = re.search(r'<a href="(?P<url>.*?)"', line) 
    if allmatches and allmatches.groupdict()['url'] == url: 
     return re.sub(r'<a href="(?P<url>.*?)"', allmatches, 1) 
    else: 
     return None 

は私が.search()メソッドを使用しています問題ですか?

アドバイスをいただければ幸いです。

おかげで、 JML

+0

それは、パターンの*すべて*のインスタンスと一致し、それが唯一* 1 *に一致するようにするために、私は希望 - 私は私の質問を更新しました試みを含める。 – jml

+0

「あなたのコードはどのようなものですか?」という意味を明確にしてください。それは動作しないと言っていますか?何を言っているのですか? –

+0

上記のとおり、質問を更新しました。この時点で何が不明なのですか?コードの最初のビットが実行されますが、結果は1行に複数一致します(複数の場合)。 2番手は最初の試合を選別しようとする試合で、どうやってやるのか分からない。 – jml

答えて

0

さらに別のアップデート。
ご迷惑をおかけして申し訳ありませんが、私の責任で終わったと思います。私がline.replace()を使用したとき、私は正しい検索文字列を使用していませんでした。reモジュールのテストだけです。ここで

は私の問題を修正終わった答えです:

line.replace('<a href="' + test_str + '">', '<a href="' + re_string + '">') 
0

私の推測では、あなたがMatch Objectsにもう少し読み取りを行うために必要があるということです。特にGroups

これが役に立ちます。

+0

私は以下を使ってみました:allmatches.group(1)...しかし、これはまったく動作しません。それでも複数の一致が得られます。 – jml

+0

残念ながら私はあなたが話している振る舞いを再現することさえできません。申し訳ありません! :( – William