6

re.sub を使用して文字列内の 2 つの単語を他の 2 つの単語に変更すると、出力が得られました。しかし、数値出力でそれを試してみると、正しく出力されません

>>> import re
>>> a='this is the string i want to change'
>>> re.sub('(.*)is(.*)want(.*)','\\1%s\\2%s\\3' %('was','wanted'),a)
'this was the string i wanted to change'
>>> re.sub('(.*)is(.*)want(.*)','\\1%s\\2%s\\3' %('was','12345'),a)
'this was\x8a345 to change'
>>>

なぜこれが起こるのかわかりません。これを使用する方法を教えてください。事前に感謝します

4

1 に答える 1

8

何が起こるかというと、replacement を渡しているためr'\1was\212345\3'、Python は後方参照番号 2、21、211、... が必要かどうかを判断できません。最大のもの 212345 を選択するだけで、これは明らかに式のグループ インデックスではありません。したがって、Python は、バイト文字列リテラルを意味していると判断しますb'\212'。これは、b'\x8a'.

あいまいさを解決するには、長い後方参照構文を使用します\g<GROUP_NUMBER_HERE>

>>> re.sub('(.*)is(.*)want(.*)','\\g<1>%s\\g<2>%s\\g<3>' %('was','12345'),a)
'this was the string i 12345 to change'
于 2012-08-14T09:36:51.200 に答える