2

生の文字列、正規表現パターン、および置換に関する簡単な質問:

次のように定義された文字列変数があります。

> print repr(foo)

'\n\t\t\n\t\tIf (GUTIAttach>=1) //In case of GUTI attach Enodeb should not ask RRCUecapa again\n\t\tUECapInfo;//Mps("( \\"rat_Type\\":0 \\"ueCapabilitiesRAT_Container\\":hex:011c0000000080 )");

私の問題は文字"("であり、正規表現パターンとして後で使用されるため、生の文字列の内部でそれらを")"置き換えたいと考えています。"\(""\)"

私はこの方法を使用しようとしました:

foo_tmp= [inc.replace(')', '\)') for inc in foo]
foo_tmp= [inc.replace('(', '\)') for inc in foo_tmp]
foo = "".join(foo_tmp)

結果は次のとおりです。

 > print repr(foo)

'\n\t\t\n\t\tIf \\(GUTIAttach>=1\\) //In case of GUTI attach Enodeb should not ask RRCUecapa again\n\t\t{\n\t\t\tUECapInfo;//Mps\\("\\( \\"rat_Type\\":0 \\"ueCapabilitiesRAT_Container\\":hex:011c0000000080 \\)"\\);

文字"("およびは、およびの代わりにおよびに")"置き換えられました。これは私には少し予想外です。文字列の他の部分を変更せずに 1 つのスラッシュだけを取得する方法を知っていますか?"\\(""//)""\(""\)"

注:.decode('string_escape')残りの文字列が原因で、メソッドも機能しません。元の生の文字列に既に存在する二重スラッシュは、変更してはなりません。

助けてくれてどうもありがとう

4

1 に答える 1

5

re.escape()関数を使用して、正規表現のメタ文字をエスケープします

あなたが見ているのは、それ以外は完全に正常な Python の動作です。あなたはpythonリテラル表現を見ています。出力を Python インタープリターに貼り付けて、値を再作成できます。そのため、エスケープ コードとして解釈される可能性のあるものはすべてエスケープされます。シングル\は通常、エスケープ シーケンスの開始として解釈されるのを防ぐために 2 倍になります。

>>> '\('
'\\('
>>> print '\\('
\(

fooこれは、文字列の他の場所で機能していることがわかります。\n文字の組み合わせは改行文字を表し、 2 つの別個の文字とではありません。テキストにリテラルandを含めたい場合は、バックスラッシュを 2 倍にする必要があります。の値をさらに調べると、単一のバックスラッシュとそれに続く引用符が見つかります。\n\n\\nfoo\\""

于 2013-08-12T15:40:55.580 に答える