在使用.format时,如何在字符串中逃脱字符串中的Curly-Brace({})字符?
非工作示例:
print(" \{ Hello \} {0} ".format(42))
所需的输出:
{Hello} 42
Non-working example:
print(" \{ Hello \} {0} ".format(42))
Desired output:
{Hello} 42
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(24)
您需要将
{{
和}}}}
加倍,这是格式字符串语法的python文档:
You need to double the
{{
and}}
:Here's the relevant part of the Python documentation for format string syntax:
python 3.6+(2017)
在最新版本的Python中,将使用 f-strings (另请参见
使用f-strings,应该使用double
{{
或}}}
产生所需的表达式
如果您需要在括号中解析表达式而不是使用文字文本,则会 括号集:
生产
Python 3.6+ (2017)
In the recent versions of Python one would use f-strings (see also PEP498).
With f-strings one should use double
{{
or}}
produces the desired
If you need to resolve an expression in the brackets instead of using literal text you'll need three sets of brackets:
produces
您可以将牙套加倍逃脱它。
例如:
You escape it by doubling the braces.
Eg:
您想用字符
{
或}
格式化字符串,您只需将它们加倍即可。
格式
{
带有f'{{'
and}
带有f'}}'
so:
输出:输出:
或确切的示例:
将打印:
最后:
You want to format a string with the character
{
or}
You just have to double them.
format
{
withf'{{'
and}
withf'}}'
So :
Output :
OR for the exact example :
Will print :
Finally :
OP写下了此评论:
在与JSON打交道时出现“逃脱的括号”问题很常见。
我建议这样做:
它比替代方案更干净,即:
当JSON字符串比示例更复杂时,使用
JSON
库绝对是可取的。The OP wrote this comment:
It's pretty common that the "escaping braces" issue comes up when dealing with JSON.
I suggest doing this:
It's cleaner than the alternative, which is:
Using the
json
library is definitely preferable when the JSON string gets more complicated than the example.尝试以下方法:
x =“ {{hello}} {0}”
Try this:
x = "{{ Hello }} {0}"
尝试这样做:
Try doing this:
尽管没有任何更好的方法,但您也可以做到这一点:
例如,当某人想要打印
{groment}
时,它可能很有用。它可能比'{{{{}}}'。格式('参数')
请注意,您省略参数位置(例如
{}
而不是),它可能比
'{{{} }}'。 {0}
)python 2.7Although not any better, just for the reference, you can also do this:
It can be useful for example when someone wants to print
{argument}
. It is maybe more readable than'{{{}}}'.format('argument')
Note that you omit argument positions (e.g.
{}
instead of{0}
) after Python 2.7输出
如果有人想使用FSTRINGS在卷曲括号内打印一些东西。
outputs
In case someone wanted to print something inside curly brackets using fstrings.
f-string(Python 3)
您可以避免必须通过使用F-Sning 仅使用F-strings 将卷曲支架加倍应用,并使用常规(哑巴)字符串作为字面意义上的所有内容,并且可能包含“不安全”的特殊字符。 让python让您简单地通过 by 将多个字符串堆叠在一起。
f-strings (python 3)
You can avoid having to double the curly brackets by using f-strings ONLY for the parts of the string where you want the f-magic to apply, and use regular (dumb) strings for everything that is literal and might contain 'unsafe' special characters. Let python do the string joining for you simply by stacking multiple strings together.
如果您需要将两个卷发括号放在字符串中,则需要在变量的每一侧进行5个卷发括号。
If you need to keep two curly braces in the string, you need 5 curly braces on each side of the variable.
如果您要进行很多操作,那么定义一个实用程序功能可能会很好地使用任意的支撑式替代品,例如
请注意,这将与括号为2的括号为2或两个的效果字符串(用于多个特定定界符)。
If you are going to be doing this a lot, it might be good to define a utility function that will let you use arbitrary brace substitutes instead, like
Note that this will work either with brackets being a string of length 2 or an iterable of two strings (for multi-character delimiters).
我最近遇到了这一点,因为我想将字符串注入预制的JSON。
我的解决方案是创建一个辅助方法,这样:
然后,您可以做类似的事情:
如果绩效不是问题,请完成工作。
I recently ran into this, because I wanted to inject strings into preformatted JSON.
My solution was to create a helper method, like this:
You can then do something like:
Gets the job done if performance is not an issue.
原因是
{}
是.format()
的语法,因此在您的情况下您好} ,因此引发了错误。您可以使用Double Curly Braces {{}}
或
尝试
%s
进行文本格式,Reason is ,
{}
is the syntax of.format()
so in your case.format()
doesn't recognize{Hello}
so it threw an error.you can override it by using double curly braces {{}},
or
try
%s
for text formatting,我参加这个聚会迟到了。我成功地将括号放在替换元素中,这样的是:
严格来说
,这不是OP要求的,因为他/他想要格式字符串的括号,但这可能会对某人有所帮助。
I am ridiculously late to this party. I am having success placing the brackets in the replacement element, like this:
which prints
Strictly speaking this is not what OP is asking, as s/he wants the braces in the format string, but this may help someone.
这是另一个解决方案。为什么很棒:
只是这个简单的功能:
如何使用:
Here is another solution for it. Why it's great:
It's just this simple function:
How to use:
我使用double {{{}}来防止FSTRING值注入,
例如,Heres My Postgres Update语句以更新一个整数数组列,该列以{}的表达式捕获数组,即:
ports ='{100,200,300}'
带FSTRINGS '它的
实际查询语句将
是一个有效的Postgres Satement
I used a double {{ }} to prevent fstring value injection,
for example, heres my Postgres UPDATE statement to update a integer array column that takes expression of {} to capture the array, ie:
ports = '{100,200,300}'
with fstrings its,
the actual query statement will be,
which is a valid postgres satement
我在尝试打印文本时偶然发现了这个问题,我可以将粘贴复制到乳胶文档中。我在此答案并利用命名替换字段:
您想打印出带有Mulitple变量的产品,索引,例如
,在乳胶中为
$ a_ {0042}*a_ {3141}*a_ {2718}*a_ a_ {0042} $
以下代码可以使用命名字段来完成该作业,因此对于许多索引,它可以可读:
I stumbled upon this problem when trying to print text, which I can copy paste into a Latex document. I extend on this answer and make use of named replacement fields:
Lets say you want to print out a product of mulitple variables with indices such as
, which in Latex would be
$A_{ 0042 }*A_{ 3141 }*A_{ 2718 }*A_{ 0042 }$
The following code does the job with named fields so that for many indices it stays readable:
您可以使用“报价墙”将格式的字符串部分与常规字符串部分分开。
从:
到
一个更清晰的示例将
输出:
现在,添加报价墙,如:
输出:
You can use a "quote wall" to separate the formatted string part from the regular string part.
From:
to
A clearer example would be
Output:
Now, add the quote wall like so:
Output:
如果您只想打印卷发的一侧:
If you want to print just one side of the curly brace:
如果要仅打印一个卷曲括号(例如
{
),则可以使用{{
,并且可以在以后在如果需要,字符串。例如:
If you want to only print one curly brace (for example
{
) you can use{{
, and you can add more braces later in the string if you want.For example:
当您只是想插值代码字符串时,我建议使用 jinja2 这是一个完整的 - IE的特色模板引擎,因此
您不会被强制重复卷曲牙套,因为所有其他答案都建议
When you're just trying to interpolate code strings I'd suggest using jinja2 which is a full-featured template engine for Python, ie:
So you won't be enforced to duplicate curly braces as the whole bunch of other answers suggest
如果您需要可以格式格式的F弦模板中的卷曲支架,则需要在F-string的一组卷曲支架中输出一个包含两个卷发括号的字符串:
If you need curly braces within a f-string template that can be formatted, you need to output a string containing two curly braces within a set of curly braces for the f-string:
还是仅参数括号本身?可能很冗长。
Or just parametrize the bracket itself? Probably very verbose.