Respuestas:
Si no puede asumir que todas las cadenas que procesa tienen comillas dobles, puede usar algo como esto:
if string.startswith('"') and string.endswith('"'):
string = string[1:-1]
Editar:
Estoy seguro de que acaba de usar string
como nombre de variable para ejemplificación aquí y en su código real tiene un nombre útil, pero me siento obligado a advertirle que hay un módulo nombrado string
en las bibliotecas estándar. No se carga automáticamente, pero si alguna vez lo usa, import string
asegúrese de que su variable no la eclipse.
Para eliminar el primer y último carácter, y en cada caso hacer la eliminación solo si el carácter en cuestión es una comilla doble:
import re
s = re.sub(r'^"|"$', '', s)
Tenga en cuenta que el patrón RE es diferente al que había proporcionado, y la operación es sub
("sustituto") con una cadena de reemplazo vacía ( strip
es un método de cadena pero hace algo bastante diferente a sus requisitos, como han indicado otras respuestas).
startsWith
.
IMPORTANTE: Estoy ampliando la pregunta / respuesta para eliminar las comillas simples o dobles. E interpreto que la pregunta significa que AMBAS citas deben estar presentes y coincidir para realizar la tira. De lo contrario, la cadena se devuelve sin cambios.
Para "quitar de comillas" una representación de cadena, que puede tener comillas simples o dobles alrededor (esta es una extensión de la respuesta de @ 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
Explicación:
startswith
puede tomar una tupla para que coincida con cualquiera de las varias alternativas. El motivo del paréntesis DOBLADO ((
y ))
es para que pasamos UN parámetro ("'", '"')
a startswith()
, para especificar los prefijos permitidos, en lugar de DOS parámetros "'"
y '"'
, que se interpretaría como un prefijo y una posición de inicio (no válida).
s[-1]
es el último carácter de la cadena.
Pruebas:
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"
(Para mí, las expresiones regulares no son obvias de leer, así que no intenté extender la respuesta de @ Alex).
len(s) >= 2
, o algo similar.
Casi termino. Citando de http://docs.python.org/library/stdtypes.html?highlight=strip#str.strip
El argumento chars es una cadena que especifica el conjunto de caracteres que se eliminarán.
[...]
El argumento chars no es un prefijo o sufijo; más bien, todas las combinaciones de sus valores se eliminan:
Entonces el argumento no es una expresión regular.
>>> string = '"" " " ""\\1" " "" ""'
>>> string.strip('"')
' " " ""\\1" " "" '
>>>
Tenga en cuenta que esto no es exactamente lo que solicitó, ¡porque consume múltiples comillas de ambos extremos de la cadena!
Tengo un código que debe eliminar las comillas simples o dobles, y no puedo simplemente ast.literal_eval.
if len(arg) > 1 and arg[0] in ('"\'') and arg[-1] == arg[0]:
arg = arg[1:-1]
Esto es similar a la respuesta de ToolmakerSteve, pero permite cadenas de longitud 0 y no convierte el carácter único "
en una cadena vacía.
La siguiente función eliminará las áreas vacías y devolverá las cadenas sin comillas. Si no hay comillas, devolverá la misma cadena (despojada)
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
Comenzando Python 3.9
, puede usar removeprefix
y removesuffix
:
'"" " " ""\\1" " "" ""'.removeprefix('"').removesuffix('"')
# '" " " ""\\1" " "" "'
strip
, tenga en cuenta que a) este método no toma una expresión regular como argumento, b) la expresión regular que proporcionó no habría funcionado de todos modos yc) este método elimina todos los caracteres adyacentes, no solo uno, por lo que habría perdido dos comillas dobles con.strip('"')
.