Şunlardan çift alıntı yapmak istiyorum:
string = '"" " " ""\\1" " "" ""'
elde etmek üzere:
string = '" " " ""\\1" " "" "'
Ben kullanmaya çalıştı rstrip
, lstrip
vestrip('[^\"]|[\"$]')
ama bir işe yoktu.
Bunu nasıl yapabilirim?
Yanıtlar:
İşlediğiniz tüm dizelerin çift tırnak içerdiğini varsayamıyorsanız, aşağıdaki gibi bir şey kullanabilirsiniz:
if string.startswith('"') and string.endswith('"'):
string = string[1:-1]
Düzenle:
Eminim string
burada örnekleme için değişken adı olarak kullanmışsınızdır ve gerçek kodunuzda yararlı bir adı vardır, ancak string
standart kütüphanelerde adında bir modül olduğu konusunda sizi uyarmak zorunda hissediyorum . Otomatik olarak yüklenmez, ancak kullanırsanız import string
değişkeninizin onu gölgede bırakmadığından emin olun.
İlk ve son karakterleri kaldırmak için ve her durumda kaldırma işlemini yalnızca söz konusu karakter çift tırnak ise yapın:
import re
s = re.sub(r'^"|"$', '', s)
RE kalıbının vermiş olduğunuzdan farklı olduğuna ve işlemin sub
("değiştir") boş bir değiştirme dizesi ( strip
bir dize yöntemidir, ancak diğer yanıtların da belirttiği gibi gereksinimlerinizden oldukça farklı bir şey yapar) olduğuna dikkat edin.
startsWith
.
ÖNEMLİ: Soruyu / cevabı tek veya çift tırnak işaretlerini kaldıracak şekilde genişletiyorum. Ve ben soruyu, şeridi gerçekleştirmek için İKİ alıntıların da mevcut ve eşleşen olması gerektiği şeklinde yorumluyorum. Aksi takdirde, dize değiştirilmeden döndürülür.
Çevresinde tek veya çift tırnak bulunan bir dizgi temsilini "özümlemek" için (bu, @ tgray'ın cevabının bir uzantısıdır):
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
Açıklama:
startswith
çeşitli alternatiflerden herhangi birini eşleştirmek için bir demet alabilir. Katlanmış parantez nedeni ((
ve ))
biz BİR parametre geçirmek öyle mi ("'", '"')
üzere startswith()
, önek yerine İKİ parametrelerini izin belirtmek için "'"
ve '"'
bir önek ve (geçersiz) başlangıç pozisyonu olarak yorumlanır.
s[-1]
dizedeki son karakterdir.
Test yapmak:
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"
(Benim için normal ifade ifadelerinin okunması açık değil, bu yüzden @ Alex'in cevabını genişletmeye çalışmadım.)
len(s) >= 2
veya benzeri bir şey ekleyebilirsiniz .
Neredeyse bitti. Http://docs.python.org/library/stdtypes.html?highlight=strip#str.strip adresinden alıntı
Karakter argümanı, kaldırılacak karakter kümesini belirten bir dizedir.
[...]
Karakterler argümanı bir önek veya sonek değildir; bunun yerine, değerlerinin tüm kombinasyonları çıkarılır:
Dolayısıyla, argüman bir normal ifade değildir.
>>> string = '"" " " ""\\1" " "" ""'
>>> string.strip('"')
' " " ""\\1" " "" '
>>>
Bunun tam olarak istediğiniz şey olmadığını unutmayın, çünkü dizenin her iki ucundan birden fazla alıntı yiyor!
Tek veya çift tırnak işaretlerini kaldırması gereken bir kodum var ve bunu basitçe ast.literal_eval yapamam.
if len(arg) > 1 and arg[0] in ('"\'') and arg[-1] == arg[0]:
arg = arg[1:-1]
Bu ToolmakerSteve'in cevabına benzer, ancak 0 uzunlukta dizelere izin verir ve tek karakteri "
boş bir dizeye dönüştürmez.
Aşağıdaki işlev boş boşlukları çıkaracak ve dizeleri tırnak işaretleri olmadan döndürecektir. Eğer tırnak işareti yoksa, aynı dizgeyi döndürür (soyulmuş)
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
Ayından itibaren Python 3.9
kullanabileceğiniz removeprefix
ve removesuffix
:
'"" " " ""\\1" " "" ""'.removeprefix('"').removesuffix('"')
# '" " " ""\\1" " "" "'
strip
, lütfen a) bu yöntemin bağımsız değişken olarak bir normal ifadeyi almadığını, b) sağladığınız normal ifadenin zaten işe yaramayacağını ve c) bu yöntemin yalnızca bir değil, tüm bitişik karakterleri çıkaracağını unutmayın. ile iki çift tırnak kaybederdin.strip('"')
.