¿Cómo incluir un carácter de comillas dobles y/o comillas simples en un literal de cadena de Python sin procesar?

4 minutos de lectura

avatar de usuario de mpen
mpen

Considerar:

>>> r"what"ever"
SyntaxError: invalid syntax
>>> r"what\"ever"
'what\\"ever'

Entonces, ¿cómo obtenemos la cita, pero no la barra?

Y por favor no sugiera r'what"ever'porque entonces la pregunta es ¿cómo incluimos ambos tipos de citas?

Relacionado

  • En el caso de uso motivador para cadenas sin formato (regex y otros casos en los que algo que no sea Python interpreta las barras invertidas), la barra invertida está bien, porque será procesada por el motor de expresiones regulares/cualquiera que sea el motor. Esto no se aplica a todos los casos en los que es posible que desee utilizar cadenas sin formato, pero asegúrese de pensar si se aplica a su caso de uso antes de intentar eliminar las barras invertidas.

    – usuario2357112

    13 de noviembre de 2018 a las 20:06

Avatar de usuario de Adam Rosenfield
adam rosenfield

Si desea usar comillas dobles en cadenas pero no comillas simples, puede usar comillas simples como delimitador en su lugar:

r'what"ever'

Si necesita ambos tipos de comillas en su cadena, use una cadena entre comillas triples:

r"""what"ev'er"""

Si desea incluir ambos tipos de cadenas entre comillas triples en su cadena (un caso extremadamente improbable), no puede hacerlo y tendrá que usar cadenas no crudas con escapes.

  • Excelente. Me tomó un segundo darme cuenta de que también podía hacer cadenas entre comillas triples sin procesar.

    – mpen

    07/01/2011 a las 21:35

  • También me gusta el último párrafo… esto era exactamente lo que estaba tratando de averiguar. Las limitaciones de los diferentes estilos de cotización. Estoy comparando Python r"raw string" y C# @"@-quoted string" y """triple quotes"""

    – mpen

    7 de enero de 2011 a las 21:41

  • Python newb aquí, un poco confundido, no lo es r'what"ever" un error de análisis? Querías decir r'what"ever'?

    – RMN

    14/08/2014 a las 23:07

  • @Jamby Tienen un sistema de escape, solo lo usa con una cadena no cruda (cadenas sin la r delante de ellas), y funciona como casi cualquier otro idioma.

    – Cobertos

    17/11/2016 a las 19:05

  • @MiniQuark: r''''foo"''' y r""""foo'""" funciona bien para producir tales cadenas

    – Adam Rosenfield

    21 de julio de 2018 a las 23:41


Avatar de usuario de Bakuriu
Bakuriú

Si necesita cualquier tipo de cotización (simple, doble y triple para ambos) puede “combinar” (0) las cadenas:

>>> raw_string_with_quotes = r'double"' r"single'" r'''double triple""" ''' r"""single triple''' """
>>> print raw_string_with_quotes
double"single'double triple""" single triple'''

También puede “combinar” (0) cadenas sin procesar con cadenas sin procesar:

>>> r'raw_string\n' 'non-raw string\n'
'raw_string\\nnon-raw string\n'

(0): de hecho, el analizador de Python une las cadenas y no crea varias cadenas. Si agrega el operador “+”, se crean y combinan varias cadenas.

Avatar de usuario de Karl
Carlos

Python tiene más de una forma de hacer cadenas. La siguiente sintaxis de cadena le permitiría usar comillas dobles:

'''what"ever'''

  • Te perdiste el crudo parte de la pregunta

    – mpen

    7 de enero de 2011 a las 21:33

No importa, la respuesta son cadenas crudas entre comillas triples:

r"""what"ever"""

Como me topé con esta respuesta, y me ayudó mucho, pero encontré un problema sintáctico menor, sentí que debería evitar la posible frustración de otros. La cadena entre comillas triples funciona para este escenario como se describe, pero tenga en cuenta que si el ” que desea en la cadena aparece al final de la propia cadena:

somestr = """This is a string with a special need to have a " in it at the end""""

Obtendrá un error en la ejecución porque las comillas “””” (4) seguidas confunden al lector de cadenas, ya que cree que ya llegó al final de la cadena y luego encuentra un “al azar”. Puede validar esto insertando un espacio en las 4 comillas así: ” “”” y no tendrá el error.

En este caso especial, necesitará usar:

somestr="This.....at the end""

o use el método descrito anteriormente de construir múltiples cadenas con ” y ‘ combinados y luego concatenarlas después del hecho.

Avatar de usuario de Illusionx
ilusionx

Solo para incluir la nueva funcionalidad compatible con Python f String:

var_a = 10

f"""This is my quoted variable: "{var_a}". """

Avatar de usuario de Peter Mortensen
Pedro Mortensen

Usar:

dqote="""
sqote="'"

Utilice el operador ‘+’ y dqote y squote variables para obtener lo que necesita.

Si lo quiero sed -e s/",u'"https://stackoverflow.com/",'"/g -e s/^"u'"https://stackoverflow.com/"'"/puedes intentar lo siguiente:

dqote="""
sqote="'"
cmd1="sed -e s/" + dqote + ",u'" + dqote + "https://stackoverflow.com/" + dqote + ",'" + dqote + '/g -e s/^"u' + sqote + dqote + "https://stackoverflow.com/" + dqote + sqote + dqote + "https://stackoverflow.com/"

¿Ha sido útil esta solución?