5
>>> base64_encode = lambda url : url.encode('base64').replace('\n', '')
>>> s = '<A HREF="http://www.google.com" ID="test">blah</A>'
>>> re.sub(r'(?<=href=")([\w:/.]+)(?=")', base64_encode(r'\1'), s, flags=re.I)
<A HREF="XDE=" ID="test">blah</A>

文字列の base64 エンコーディングhttp://www.google.comaHR0cDovL3d3dy5nb29nbGUuY29tではなくXDE=、これは のエンコーディングです\1

キャプチャされたグループを関数に渡すにはどうすればよいですか?

4

2 に答える 2

11

関数を渡してre.subから、そこからグループをプルします。

def base64_encode(match):
    """
    This function takes a re 'match object' and performs
    The appropriate substitutions
    """

    group = match.group(1)
    ... #Code to encode as base 64
    return result

re.sub(...,base64_encode,s,flags=re.I)
于 2013-06-16T18:00:00.557 に答える
4

一致オブジェクトとなる単一のパラメーターを取る関数を作成します (これらの詳細については、 http://docs.python.org/2.7/library/re.html#match-objectsを参照してください)。関数内で、 を使用m.group(1)して、一致オブジェクトから最初のグループを取得しますm

関数を re.sub に渡すときは、括弧を使用しないでください。

re.sub("some regex", my_match_function, s, flags=re.I)
于 2013-06-16T18:00:37.543 に答える