web-dev-qa-db-fra.com

python Comment puis-je enlever les guillemets doubles

Je veux enlever les guillemets

string = '"" " " ""\\1" " "" ""'

devenir

string = '" " " ""\\1" " "" "'

J'ai essayé d'utiliser rstrip, lstrip et strip('[^\"]|[\"$]') mais cela n'a pas fonctionné.

Comment puis-je faire ceci? Merci de m'aider.

92
Walapa

Si les citations que vous voulez effacer vont toujours être "premier et dernier" comme vous l'avez dit, vous pouvez simplement utiliser:

string = string[1:-1]

170
houbysoft

Si vous ne pouvez pas supposer que toutes les chaînes que vous traitez ont des guillemets doubles, vous pouvez utiliser quelque chose comme ceci:

if string.startswith('"') and string.endswith('"'):
    string = string[1:-1]

Modifier:

Je suis sûr que vous venez d'utiliser string comme nom de variable pour exemplifier ici et que dans votre code réel, il porte un nom utile, mais je me sens obligé de vous avertir qu'il existe un module nommé string dans les bibliothèques standard. Ce n'est pas chargé automatiquement, mais si vous utilisez un jour import string assurez-vous que votre variable ne l'éclipse pas.

85
tgray

Pour supprimer les premier et dernier caractères, et dans chaque cas, supprimez-les uniquement si le caractère en question est une citation double:

import re

s = re.sub(r'^"|"$', '', s)

Notez que le modèle RE est différent de celui que vous avez donné et que l'opération est sub ("substitute") avec une chaîne de remplacement vide (strip est une méthode de chaîne mais fait quelque chose de très différent de vos besoins, comme d’autres réponses l’ont indiqué).

41
Alex Martelli

IMPORTANT: J'étends la question/réponse pour supprimer les guillemets simples ou doubles. Et j'interprète la question comme signifiant que les DEUX citations doivent être présentes et correspondantes pour effectuer la bande. Sinon, la chaîne est retournée inchangée.

Pour "supprimer" une représentation sous forme de chaîne, qui pourrait être entourée de guillemets simples ou doubles (ceci est une extension de la réponse 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

Explication:

startswith peut prendre un tuple, pour correspondre à plusieurs alternatives. La raison des DOUBLED parenthèses (( Et )) Est telle que nous passons UN paramètre ("'", '"') À startswith(), pour spécifier les préfixes autorisés plutôt que TWO. les paramètres "'" et '"', qui seraient interprétés comme un préfixe et une position de départ (non valide).

s[-1] Est le dernier caractère de la chaîne.

Essai:

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"

(Pour moi, les expressions regex ne sont pas évidentes à lire, donc je n'ai pas essayé d'étendre la réponse de @ Alex.)

39
ToolmakerSteve

Si string est toujours comme vous le montrez:

string[1:-1]
10
Larry

Presque fini. Citant de http://docs.python.org/library/stdtypes.html?highlight=strip#str.strip

L'argument chars est une chaîne spécifiant le jeu de caractères à supprimer.

[...]

L'argument de caractères n'est pas un préfixe ou un suffixe; au contraire, toutes les combinaisons de ses valeurs sont dépouillées:

Donc, l'argument n'est pas une expression rationnelle.

>>> string = '"" " " ""\\1" " "" ""'
>>> string.strip('"')
' " " ""\\1" " "" '
>>> 

Notez que ce n'est pas exactement ce que vous avez demandé, car il mange plusieurs guillemets à la fin de la chaîne!

9
pihentagy

Si vous êtes sûr qu'il y a un "au début et à la fin, que vous voulez supprimer, faites simplement:

string = string[1:len(string)-1]

ou

string = string[1:-1]
4
TooAngel

Supprime une chaîne déterminée du début et de la fin d'une chaîne.

s = '""Hello World""'
s.strip('""')

> 'Hello World'
2
nsantana

J'ai du code qui doit effacer les guillemets simples ou doubles, et je ne peux pas simplement l'ast.literal_eval.

if len(arg) > 1 and arg[0] in ('"\'') and arg[-1] == arg[0]:
    arg = arg[1:-1]

Ceci est similaire à la réponse de ToolmakerSteve, mais autorise les chaînes de longueur 0 et ne transforme pas le caractère unique " dans une chaîne vide.

1
dbn

dans votre exemple, vous pouvez utiliser la bande mais vous devez fournir l'espace

string = '"" " " ""\\1" " "" ""'
string.strip('" ')  # output '\\1'

notez que le\'dans la sortie est la norme python entre guillemets pour la sortie de chaîne

la valeur de votre variable est '\\ 1'

0
RomainL.

trouver la position du premier et du dernier "dans votre chaîne

>>> s = '"" " " ""\\1" " "" ""'
>>> l = s.find('"')
>>> r = s.rfind('"')

>>> s[l+1:r]
'" " " ""\\1" " "" "'
0
remosu