1

文字列の一部を置き換える正規表現を作成しようとしています。これは文字列の例です:

string = u'/nl/nl/1681/1/0/a/all/'
pattern = r'(/\w{2}/\w{2}/)(\d+)/(\d+)(/\d+/[ans]/all/)'
pattern_obj = re.compile(pattern)

パターンは 4 グループを指定します。検索してみると以下のような結果になります。

m = pattern_obj.search(string)
m.group(0) -> u'/nl/nl/1681/1/0/a/all/'
m.group(1) -> u'/nl/nl/'
m.group(2) -> u'1681'
m.group(2) -> u'1'
m.group(4) -> u'/0/a/all/'

ここまでは順調ですね。ここで、次のように置換文字列を指定します。

replacement = r'\1' + '1000' + '/' + '20' + r'\4'

そして、次のステートメントを発行します。

pattern_obj.sub(replacement,string)

これにより、次の結果が得られます。

u'H00/20/0/a/all/'

私はこれを期待していました:

u'/nl/nl/1000/20/0/a/all/'

私は何か間違ったことをしているに違いありませんが、何がわかりません。誰でも私を助けることができますか?

4

1 に答える 1

3

置換文字列は、完全に組み立てられると、グループ\11000/20\4番号1 の後ろに.\110H10

明確に後方参照であることを確認する\g<1>代わりに、書く必要があります。のドキュメントを\1参照してください。re.sub

于 2012-09-13T16:34:54.860 に答える