2

変数生の文字列として扱うのがこんなに難しいなんて信じられない! 同様の質問を検索して見つけましたが、適切な答えはありません。

ドメイン名が格納された変数があります。たとえば、「ドメイン\ユーザー」の場合、を使用してのみユーザー名を取得する必要がありますre。問題は、Python が特殊文字の組み合わせの 16 進値を提供することです。たとえば\b、文字列に含まれている場合です。

変数からリテラル文字列を取得するだけで、他には何もありません。

author = list[0] // list[0] contains 'domain\blah'
author = re.sub('.*\\\\(.+)$', r'\1', author)

私は期待blahしてい'domain\x08lah'ます!

他の正規表現操作から文字列を取得しているため、最初に文字列を生の文字列として保存することはできません。

何か案は?

編集:

変数に 1 つのスラッシュが含まれていると思い込んでいたのは間違いでした。実際、別の操作から変数を取得するとき、バッククラッシュは既にエスケープされていました。そのため、テスト シナリオを作成しようとしたときに、自分自身でそれを問題にしていました。

4

1 に答える 1

3

生の文字列リテラルは、通常の文字列リテラルが使用する (ほとんどの) 文字列エスケープ コードを回避することにより、文字列値を作成するためにのみ使用されます。

あなたの文字列は文字で始まりました\x08; バックスラッシュとb文字が含まれていませんでした。に含まれる値を文字列リテラルで定義した場合list[0]、バックスラッシュをエスケープするのを忘れています。データが別の場所から来た場合、生の 16 進バイト値 08 が表示されます。

>>> list_0 = 'domain\x08lah'
>>> list_0[6]
'\x08'
>>> len(list_0[6])
1
>>> ord(list_0[6])
8

このバイトが代わりに 2 文字であることが意図されていた場合は、文字列置換でデータを修復できます。

>>> list_0.replace('\b', '\\b')
'domain\\blah'
于 2013-08-05T09:59:13.997 に答える