How can I strip first and last double quotes?
If you can't assume that all the strings you process have double quotes you can use something like this:
if string.startswith('"') and string.endswith('"'): string = string[1:-1]
Edit:
I'm sure that you just used string
as the variable name for exemplification here and in your real code it has a useful name, but I feel obliged to warn you that there is a module named string
in the standard libraries. It's not loaded automatically, but if you ever use import string
make sure your variable doesn't eclipse it.
IMPORTANT: I'm extending the question/answer to strip either single or double quotes. And I interpret the question to mean that BOTH quotes must be present, and matching, to perform the strip. Otherwise, the string is returned unchanged.
To "dequote" a string representation, that might have either single or double quotes around it (this is an extension of @tgray's answer):
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
Explanation:
startswith
can take a tuple, to match any of several alternatives. The reason for the DOUBLED parentheses ((
and ))
is so that we pass ONE parameter ("'", '"')
to startswith()
, to specify the permitted prefixes, rather than TWO parameters "'"
and '"'
, which would be interpreted as a prefix and an (invalid) start position.
s[-1]
is the last character in the string.
Testing:
print( dequote("\"he\"l'lo\"") )print( dequote("'he\"l'lo'") )print( dequote("he\"l'lo") )print( dequote("'he\"l'lo\"") )
=>
he"l'lohe"l'lohe"l'lo'he"l'lo"
(For me, regex expressions are non-obvious to read, so I didn't try to extend @Alex's answer.)