Jawaban:
Jika Anda tidak dapat berasumsi bahwa semua string yang Anda proses memiliki tanda kutip ganda, Anda dapat menggunakan sesuatu seperti ini:
if string.startswith('"') and string.endswith('"'):
string = string[1:-1]
Edit:
Saya yakin Anda baru saja menggunakan string
nama variabel untuk contoh di sini dan dalam kode asli Anda memiliki nama yang berguna, tetapi saya merasa berkewajiban untuk memperingatkan Anda bahwa ada modul yang diberi nama string
di pustaka standar. Ini tidak dimuat secara otomatis, tetapi jika Anda pernah menggunakannya, import string
pastikan variabel Anda tidak melebihi itu.
Untuk menghapus karakter pertama dan terakhir, dan dalam setiap kasus lakukan penghapusan hanya jika karakter yang dimaksud adalah tanda kutip ganda:
import re
s = re.sub(r'^"|"$', '', s)
Perhatikan bahwa pola RE berbeda dari yang Anda berikan, dan operasinya adalah sub
("substitusi") dengan string pengganti kosong ( strip
adalah metode string tetapi melakukan sesuatu yang sangat berbeda dari persyaratan Anda, seperti yang ditunjukkan oleh jawaban lain).
startsWith
.
PENTING: Saya memperluas pertanyaan / jawaban untuk menghapus tanda kutip tunggal atau ganda. Dan saya mengartikan pertanyaan itu berarti bahwa KEDUA tanda kutip harus ada, dan cocok, untuk melakukan strip. Jika tidak, string dikembalikan tanpa perubahan.
Untuk "membatalkan" representasi string, yang mungkin memiliki tanda kutip tunggal atau ganda di sekitarnya (ini adalah perpanjangan dari jawaban @ 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
Penjelasan:
startswith
dapat menggunakan tupel, untuk mencocokkan salah satu dari beberapa alternatif. Alasan untuk tanda kurung GANDA ((
dan ))
adalah agar kita meneruskan SATU parameter ("'", '"')
ke startswith()
, untuk menentukan prefiks yang diizinkan, bukan DUA parameter "'"
dan '"'
, yang akan ditafsirkan sebagai awalan dan posisi awal (tidak valid).
s[-1]
adalah karakter terakhir dalam string.
Pengujian:
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"
(Bagi saya, ekspresi regex tidak jelas untuk dibaca, jadi saya tidak mencoba memperpanjang jawaban @ Alex.)
len(s) >= 2
,, atau yang serupa.
Hampir selesai. Mengutip dari http://docs.python.org/library/stdtypes.html?highlight=strip#str.strip
Argumen karakter adalah string yang menentukan kumpulan karakter yang akan dihapus.
[...]
Argumen karakter bukanlah awalan atau sufiks; sebaliknya, semua kombinasi nilainya dilucuti:
Jadi argumennya bukan regexp.
>>> string = '"" " " ""\\1" " "" ""'
>>> string.strip('"')
' " " ""\\1" " "" '
>>>
Perhatikan, bahwa ini bukan yang Anda minta, karena ia memakan banyak kutipan dari kedua ujung string!
Saya memiliki beberapa kode yang perlu menghapus tanda kutip tunggal atau ganda, dan saya tidak bisa hanya ast.literal_eval itu.
if len(arg) > 1 and arg[0] in ('"\'') and arg[-1] == arg[0]:
arg = arg[1:-1]
Ini mirip dengan jawaban ToolmakerSteve, tetapi memungkinkan 0 string panjang, dan tidak mengubah karakter tunggal "
menjadi string kosong.
Fungsi di bawah ini akan menghapus spasi kosong dan mengembalikan string tanpa tanda kutip. Jika tidak ada tanda kutip maka akan mengembalikan string yang sama (dilucuti)
def removeQuote(str):
str = str.strip()
if re.search("^[\'\"].*[\'\"]$",str):
str = str[1:-1]
print("Removed Quotes",str)
else:
print("Same String",str)
return str
Mulai Python 3.9
, Anda dapat menggunakan removeprefix
dan removesuffix
:
'"" " " ""\\1" " "" ""'.removeprefix('"').removesuffix('"')
# '" " " ""\\1" " "" "'
strip
, harap perhatikan bahwa a) metode ini tidak menggunakan regex sebagai argumennya, b) regex yang Anda berikan tidak akan berfungsi dan c) metode ini menghapus semua karakter yang berdekatan, bukan hanya satu, jadi Anda akan kehilangan dua tanda kutip ganda dengan.strip('"')
.