mpen
mpen

Reputation: 283213

How to include a double-quote and/or single-quote character in a raw Python string literal?

Consider:

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

So how do we get the quote, but not the slash?

And please don't suggest r'what"ever', because then the question just becomes how do we include both types of quotes?

Related

Upvotes: 125

Views: 302643

Answers (7)

Bakuriu
Bakuriu

Reputation: 102029

If you need any type of quoting (single, double, and triple for both) you can "combine"[1] the strings:

>>> 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'''

You may also "combine"[1] raw strings with non-raw strings:

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

[1] In fact, the Python parser joins the strings, and it does not create multiple strings. If you add the "+" operator, then multiple strings are created and combined.

Upvotes: 16

illusionx
illusionx

Reputation: 3895

Just to include new Python f String compatible functionality:

var_a = 10

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

Upvotes: 2

zulfi123786
zulfi123786

Reputation: 175

Use:

dqote='"'
sqote="'"

Use the '+' operator and dqote and squote variables to get what you need.

If I want sed -e s/",u'"/",'"/g -e s/^"u'"/"'"/, you can try the following:

dqote='"'
sqote="'"
cmd1="sed -e s/" + dqote + ",u'" + dqote + "/" + dqote + ",'" + dqote + '/g -e s/^"u' + sqote + dqote + '/' + dqote + sqote + dqote + '/'

Upvotes: -3

Karl
Karl

Reputation: 6165

Python has more than one way to do strings. The following string syntax would allow you to use double quotes:

'''what"ever'''

Upvotes: 10

charrold303
charrold303

Reputation: 93

Since I stumbled on this answer, and it greatly helped me, but I found a minor syntactic issue, I felt I should save others possible frustration. The triple quoted string works for this scenario as described, but note that if the " you want in the string occurs at the end of the string itself:

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

You will hit an error at execution because the """" (4) quotes in a row confuses the string reader, as it thinks it has hit the end of the string already and then finds a random " out there. You can validate this by inserting a space into the 4 quotes like so: " """ and it will not have the error.

In this special case you will need to either use:

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

or use the method described above of building multiple strings with mixed " and ' and then concatenating them after the fact.

Upvotes: 6

Adam Rosenfield
Adam Rosenfield

Reputation: 400572

If you want to use double quotes in strings but not single quotes, you can just use single quotes as the delimiter instead:

r'what"ever'

If you need both kinds of quotes in your string, use a triple-quoted string:

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

If you want to include both kinds of triple-quoted strings in your string (an extremely unlikely case), you can't do it, and you'll have to use non-raw strings with escapes.

Upvotes: 198

mpen
mpen

Reputation: 283213

Nevermind, the answer is raw triple-quoted strings:

r"""what"ever"""

Upvotes: 5

Related Questions