回答:
処理するすべての文字列に二重引用符があると想定できない場合は、次のようなものを使用できます。
if string.startswith('"') and string.endswith('"'):
string = string[1:-1]
編集:
string
ここで例示のための変数名として使用しただけで、実際のコードでは有用な名前が付いていると思いますがstring
、標準ライブラリで指定されたモジュールがあることを警告する義務があります。自動的に読み込まれるimport string
わけではありませんが、使用する場合は、変数がそれを妨げないようにしてください。
最初と最後の文字を削除するには、それぞれの場合で、問題の文字が二重引用符である場合にのみ削除します。
import re
s = re.sub(r'^"|"$', '', s)
REパターンは指定したパターンとは異なり、操作はsub
(「置換」)空の置換文字列(strip
文字列メソッドですが、他の回答が示しているように、要件とはかなり異なるものになります)であることに注意してください。
startsWith
。
重要:質問または回答を拡張して、一重引用符または二重引用符を取り除きます。そして、私はこの質問を解釈して、ストリップを実行するには両方の引用符が存在し、一致している必要があることを意味します。それ以外の場合、文字列は変更されずに返されます。
単一引用符または二重引用符で囲まれた文字列表現を「引用解除」するには(これは@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
タプルを使用して、いくつかの選択肢のいずれかに一致させることができます。二重括弧の理由((
と))
、我々は一つのパラメータを渡すようにすることである("'", '"')
に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の答えを拡張することはしませんでした。)
len(s) >= 2
ます。
ほぼ完了しました。http://docs.python.org/library/stdtypes.html?highlight=strip#str.stripからの引用
chars引数は、削除する文字のセットを指定する文字列です。
[...]
chars引数は、プレフィックスまたはサフィックスではありません。むしろ、その値のすべての組み合わせが取り除かれます。
したがって、引数は正規表現ではありません。
>>> string = '"" " " ""\\1" " "" ""'
>>> string.strip('"')
' " " ""\\1" " "" '
>>>
文字列の両端から複数の引用符が使用されるため、これはリクエストしたものとは異なります。
以降Python 3.9
、あなたが使用することができますremoveprefix
とremovesuffix
:
'"" " " ""\\1" " "" ""'.removeprefix('"').removesuffix('"')
# '" " " ""\\1" " "" "'
strip
については、a)このメソッドは引数として正規表現を使用しないこと、b)指定した正規表現が機能しないこと、c)このメソッドは1つだけでなく、隣接するすべての文字を削除することに注意してください。を使用すると、2つの二重引用符が失われます.strip('"')
。