9

私はPythonを学ぼうとしていますが、かなり新しいので、この部分を理解することはできません。基本的に、私が今していることは、ウェブページのソースコードを取り、言葉ではないものをすべて取り除くことです。

Webページには\nと\tがたくさんあるので、\を見つけて、それと次の''の間のすべてを削除するものが必要です。

def removebackslash(source):
    while(source.find('\') != -1):
        startback = source.find('\')
        endback = source[startback:].find(' ') + startback + 1
        source = source[0:startback] + source[endback:]
    return source

私が持っているものです。\'は文字列を閉じないため、このようには機能しませんが、に変更\する\\と、文字列は。として解釈され\\ます。私はで解釈されるものを理解することはできません'\'

4

5 に答える 5

18

\エスケープ文字です。それはキャラクターに特別な意味を与えるか、その特別な意味を奪います。現在、最後の一重引用符をエスケープして、文字通りの一重引用符として扱っています。文字通りの円記号を挿入するには、それ自体でエスケープする必要があります。

def removebackslash(source):
    while(source.find('\\') != -1):
        startback = source.find('\\')
        endback = source[startback:].find(' ') + startback + 1
        source = source[0:startback] + source[endback:]
    return source
于 2012-06-07T19:06:50.237 に答える
7

replaceを使用してみてください:

str.replace(old, new[, count])

部分文字列oldのすべての出現箇所がnewに置き換えられた文字列のコピーを返します。オプションの引数カウントが指定されている場合、最初のカウントオカレンスのみが置き換えられます。

だからあなたの場合:

my_text = my_text.replace('\n', '')
my_text = my_text.replace('\t', '')
于 2012-06-07T19:09:08.823 に答える
3

他の人が言っているように、あなたはを使用する必要があります'\\'。これが機能していないと思う理由は、結果を取得すると、2つの円記号で始まっているように見えるためです。ただし、2つの円記号で始まるわけではなく、Pythonが2つの円記号を示しているだけです。\nそうでない場合は、改行(として表される)とバックスラッシュの後に文字n(として表される)の違いを区別できませんでした\\n

実際に何が起こっているのかを自分に納得させるには2つの方法があります。1つは、結果にprintを使用することです。これにより、エスケープが拡張されます。

>>> x = "here is a backslash \\ and here comes a newline \n this is on the next line"
>>> x
u'here is a backslash \\ and here comes a newline \n this is on the next line'
>>> print x
here is a backslash \ and here comes a newline 
 this is on the next line
>>> startback = x.find('\\')
>>> x[startback:]
u'\\ and here comes a newline \n this is on the next line'
>>> print x[startback:]
\ and here comes a newline 
 this is on the next line

別の方法はlen、文字列の長さを確認するために使用することです。

>>> x = "Backslash \\ !"
>>> startback = x.find('\\')
>>> x[startback:]
u'\\ !'
>>> print x[startback:]
\ !
>>> len(x[startback:])
3

3であることに注意してくださいlen(x[startback:])。文字列には、円記号、スペース、感嘆符の3つの文字が含まれています。バックスラッシュのみを含む文字列を見るだけで、何が起こっているかをさらに簡単に確認できます。

>>> x = "\\"
>>> x
u'\\'
>>> print x
\
>>> len(x)
1

xインタラクティブプロンプトで評価する(またはそのメソッドを使用する)と、2つのバックスラッシュで始まるように見えます__repr__。実際に印刷すると、バックスラッシュが1つだけであることがわかります。また、その長さを見ると、1文字だけの長さであることがわかります。

つまり、これが意味するのは、のバックスラッシュをエスケープするfind必要があり、出力に表示されるバックスラッシュも2倍になる可能性があることを認識する必要があるということです。

于 2012-06-07T19:43:36.417 に答える
2

SO自動フォーマットはあなたの問題を示しています。\は文字をエスケープするために使用されるため、終了引用符をエスケープしています。その行を次のように変更してみてください(二重引用符の使用に注意してください):

while(source.find("\\") != -1):

ドキュメントでエスケープ文字の詳細をお読みください。

于 2012-06-07T19:07:20.320 に答える
2

まだ誰もこれについて言及していないと思いますが、文字をエスケープする必要がない場合は、生の文字列を使用してください。

source.find(r'\')

文字列の前に文字rを追加すると、 Pythonは特殊文字を解釈しないようになり、入力したとおりに文字列が保持されます。

于 2012-06-08T02:04:24.790 に答える