web-dev-qa-db-ja.com

python最初と最後の二重引用符を削除する方法

二重引用符を削除したい

string = '"" " " ""\\1" " "" ""'

になる

string = '" " " ""\\1" " "" "'

rstriplstrip、およびstrip('[^\"]|[\"$]')を使用しようとしましたが、機能しませんでした。

これどうやってするの?助けてくれてありがとう。

92
Walapa

あなたが言ったように、あなたが取り除きたい引用符が常に「最初と最後」になるなら、あなたは単に使うことができます:

string = string[1:-1]

170
houbysoft

処理するすべての文字列に二重引用符があると想定できない場合は、次のようなものを使用できます。

if string.startswith('"') and string.endswith('"'):
    string = string[1:-1]

編集:

ここで例示のために変数名としてstringを使用したに違いないと思いますが、実際のコードには便利な名前がありますが、 string というモジュールが標準ライブラリ。自動的にはロードされませんが、import stringを使用する場合は、変数がEclipseを使用しないようにしてください。

85
tgray

最初と最後の文字を削除し、それぞれの場合に問題の文字が二重引用符である場合にのみ削除を実行するには:

import re

s = re.sub(r'^"|"$', '', s)

REパターンは指定したものとは異なり、操作はsub( "substitute")で空の置換文字列(stripは文字列メソッドですが、あなたとはかなり異なることを行います他の回答が示しているように、要件)。

41
Alex Martelli

重要:質問/回答を拡張して、一重引用符または二重引用符を取り除きます。そして、私は質問を解釈して、ストリップを実行するには両方の引用符が存在し、一致しなければならないことを意味します。それ以外の場合、ストリングは変更されずに返されます。

文字列表現を「引用符で囲む」ために、単一引用符または二重引用符で囲むことができます(これは@tgrayの答えの拡張です)。

def dequote(s):
    """
    If a string has single or double quotes around it, remove them.
    Make sure the pair of quotes match.
    If a matching pair of quotes is not found, return the string unchanged.
    """
    if (s[0] == s[-1]) and s.startswith(("'", '"')):
        return s[1:-1]
    return s

説明:

startswithは、タプルを使用して、いくつかの選択肢のいずれかに一致させることができます。 DOUBLEDの括弧((および))の理由は、2つのパラメーター("'", '"')および"'"ではなく、許可されたプレフィックスを指定するために、1つのパラメーター'"'startswith()に渡すためです。開始位置。

s[-1]は、文字列の最後の文字です。

テスト:

print( dequote("\"he\"l'lo\"") )
print( dequote("'he\"l'lo'") )
print( dequote("he\"l'lo") )
print( dequote("'he\"l'lo\"") )

=>

he"l'lo
he"l'lo
he"l'lo
'he"l'lo"

(私にとって、正規表現は読めないので、@ Alexの答えを拡張しようとしませんでした。)

39
ToolmakerSteve

文字列が常に表示どおりの場合:

string[1:-1]
10
Larry

ほぼ完了しました。 http://docs.python.org/library/stdtypes.html?highlight=strip#str.strip から引用

Chars引数は、削除する文字セットを指定する文字列です。

[...]

Chars引数は、プレフィックスまたはサフィックスではありません。むしろ、その値のすべての組み合わせが取り除かれます。

したがって、引数は正規表現ではありません。

>>> string = '"" " " ""\\1" " "" ""'
>>> string.strip('"')
' " " ""\\1" " "" '
>>> 

これは文字列の両端から複数の引用符を食べるため、これは正確にあなたが要求したものではないことに注意してください!

9
pihentagy

削除したい最初と最後に "があることが確かな場合は、次のようにします。

string = string[1:len(string)-1]

または

string = string[1:-1]
4
TooAngel

文字列の開始と終了から確定した文字列を削除します。

s = '""Hello World""'
s.strip('""')

> 'Hello World'
2
nsantana

一重引用符または二重引用符を削除する必要があるコードがありますが、単純にast.literal_evalすることはできません。

if len(arg) > 1 and arg[0] in ('"\'') and arg[-1] == arg[0]:
    arg = arg[1:-1]

これはToolmakerSteveの答えに似ていますが、長さ0の文字列を許可し、単一文字"を空の文字列に変換しません。

1
dbn

あなたの例では、ストリップを使用できますが、スペースを提供する必要があります

string = '"" " " ""\\1" " "" ""'
string.strip('" ')  # output '\\1'

出力の\ 'は、文字列出力の標準のpython引用符であることに注意してください

変数の値は「\\ 1」です

0
RomainL.

文字列の最初と最後の "の位置を見つける

>>> s = '"" " " ""\\1" " "" ""'
>>> l = s.find('"')
>>> r = s.rfind('"')

>>> s[l+1:r]
'" " " ""\\1" " "" "'
0
remosu