programing

.format(또는 f-string)을 사용하는 동안 문자열 내에서 컬리브레이스({}) 문자를 이스케이프하려면 어떻게 해야 합니까?

muds 2023. 4. 16. 15:59
반응형

.format(또는 f-string)을 사용하는 동안 문자열 내에서 컬리브레이스({}) 문자를 이스케이프하려면 어떻게 해야 합니까?

동작하지 않는 예:

print(" \{ Hello \} {0} ".format(42))

원하는 출력:

 {Hello} 42 

로 해야 요.{{ ★★★★★★★★★★★★★★★★★」}}:

>>> x = " {{ Hello }} {0} "
>>> print(x.format(42))
' { Hello } 42 '

다음은 형식 문자열 구문에 대한 Python 문서의 관련 부분입니다.

에는 " 필드되어 있으며, 이 필드에는 "대체 필드"가 중괄호로 있습니다.{}되지 않은 은 리터럴되지 않고 복사됩니다. 중괄호에 포함되지 않은 것은 리터럴 텍스트로 간주되며 출력에 변경되지 않고 복사됩니다.가 있는 는, 「중괄호」를 2배로 해 할 수 .{{ ★★★★★★★★★★★★★★★★★」}}.

Python 3.6+ (2017)

최신 버전의 Python에서는 f-string을 사용합니다(PEP498 참조).

double f-nowledge를 .{{ ★★★★★★★★★★★★★★★★★」}}

n = 42  
print(f" {{Hello}} {n} ")

원하는 것을 생성하다

 {Hello} 42

리터럴 텍스트를 사용하는 대신 괄호 안의 식을 해결해야 하는 경우 다음 세 가지 괄호가 필요합니다.

hello = "HELLO"
print(f"{{{hello.lower()}}}")

생산하다

{hello}

교정기를 두 개씩 돌려서 탈출하는 거야

예:

x = "{{ Hello }} {0}"
print(x.format(42))

OP는 다음과 같은 코멘트를 남겼다.

을 어떤으로 쓰려고 , 쓰려고 했어요.'{"all": false, "selected": "{}"}'.format(data) 손에 넣다{"all": false, "selected": "1,2"}

JSON을 취급할 때 "회피 교정기" 문제가 발생하는 것은 매우 흔한 일입니다.

다음을 수행할 것을 권장합니다.

import json
data = "1,2"
mydict = {"all": "false", "selected": data}
json.dumps(mydict)

다른 제품보다 깨끗합니다.

'{{"all": false, "selected": "{}"}}'.format(data)

「 」의 json라이브러리는 JSON 문자열이 예제보다 복잡할 경우 단연 권장됩니다.

을 '아까보다'로합니다.{ ★★★★★★★★★★★★★★★★★」}

두 배로 늘리면 돼

「」{f'{{' ★★★★★★★★★★★★★★★★★」}f'}}'

따라서:

name = "bob"
print(f'Hello {name} ! I want to print }} and {{ or {{ }}')

출력:

안녕하세요 bob! } 및 { 또는 { }을(를) 인쇄하고 싶습니다.

정확한 예에서는 OR:

number = 42
print(f'{{Hello}} {number}')

인쇄:

{여보세요}42

마지막으로:

number = 42
string = "bob"
print(f'{{Hello}} {{{number}}} {number} {{{string}}} {string} ')

{Hello} {42} 42 {bob} 밥

이것을 시험해 보세요.

x = "{{ Hello }} {0}"

다음을 수행합니다.

x = " {{ Hello }} {0} "
print x.format(42)

더 나은 것은 아니지만 참고용으로 다음과 같은 작업을 수행할 수도 있습니다.

>>> x = '{}Hello{} {}'
>>> print x.format('{','}',42)
{Hello} 42

, 인쇄를 때 합니다.{argument}.하다'{{{}}}'.format('argument')

위치는 인수는 생략합니다).{}{0}Python 2.7 이 python

key = "FOOBAR"
print(f"hello {{{key}}}")

출력

hello {FOOBAR}

스트링을 사용하여 곱슬 괄호 안에 인쇄하고자 하는 경우.

f-module(패키지 3)

f-magic을 적용하는 문자열 부분에만 f-string을 사용하고 리터럴이며 'unsafe' 특수문자를 포함할 수 있는 모든 부분에는 일반(dumb) 문자열을 사용하면 곱슬 괄호를 겹치지 않아도 됩니다.python이 여러 문자열을 함께 쌓는 것만으로 문자열 결합을 수행할 수 있습니다.

number = 42
print(" { Hello }"  
f" {number} " 
"{ thanks for all the fish }")

### OUTPUT:
{ Hello } 42 { thanks for all the fish }

메모: 문자열 사이의 줄 바꿈은 필요하지 않습니다.읽기 쉽도록 추가했을 뿐입니다.아래 그림과 같이 위의 코드를 작성할 수도 있습니다.

경고: 눈이 아프거나 어지러울있습니다!

print("{Hello}"f"{number}""{thanks for all the fish}")

문자열에 두 개의 곱슬괄호를 사용해야 하는 경우 변수 양쪽에 5개의 곱슬괄호가 필요합니다.

>>> myvar = 'test'
>>> "{{{{{0}}}}}".format(myvar)
'{{test}}'

이 작업을 많이 수행할 경우 다음과 같은 임의의 브레이스 대체를 대신 사용할 수 있는 유틸리티 함수를 정의하는 것이 좋습니다.

def custom_format(string, brackets, *args, **kwargs):
    if len(brackets) != 2:
        raise ValueError('Expected two brackets. Got {}.'.format(len(brackets)))
    padded = string.replace('{', '{{').replace('}', '}}')
    substituted = padded.replace(brackets[0], '{').replace(brackets[1], '}')
    formatted = substituted.format(*args, **kwargs)
    return formatted

>>> custom_format('{{[cmd]} process 1}', brackets='[]', cmd='firefox.exe')
'{{firefox.exe} process 1}'

이것은, 길이 2 의 문자열 또는 2 개의 문자열(다중 문자 딜리미터의 경우)의 반복 가능한 괄호로 기능합니다.

최근에 이걸 알게 된 건 미리 포맷된 JSON에 문자열을 삽입하고 싶었기 때문이에요.저의 솔루션은 다음과 같은 도우미 방법을 만드는 것이었습니다.

def preformat(msg):
    """ allow {{key}} to be used for formatting in text
    that already uses curly braces.  First switch this into
    something else, replace curlies with double curlies, and then
    switch back to regular braces
    """
    msg = msg.replace('{{', '<<<').replace('}}', '>>>')
    msg = msg.replace('{', '{{').replace('}', '}}')
    msg = msg.replace('<<<', '{').replace('>>>', '}')
    return msg

그런 다음 다음과 같은 작업을 수행할 수 있습니다.

formatted = preformat("""
    {
        "foo": "{{bar}}"
    }""").format(bar="gas")

성능에 문제가 없는 경우 작업을 완료합니다.

나는 이 파티에 터무니없이 늦었다.다음과 같이 브래킷을 교체 요소에 장착하는 데 성공했습니다.

print('{0} {1}'.format('{hello}', '{world}'))

인쇄하는 방법

{hello} {world}

엄밀히 말하면 OP가 요구하는 것은 이것이 아닙니다.포맷 문자열에 괄호를 삽입하고 싶기 때문입니다만, 이것이 도움이 될 가능성이 있습니다.

는 , 유는{}는 의 입니다..format() ,.format(){Hello}그래서 에러가 났어요.

이중 물결 괄호 {{}}를 사용하여 재정의할 수 있습니다.

x = " {{ Hello }} {0} "

또는

해보다%s포맷의 ,

x = " { Hello } %s"
print x%(42)  

라텍스 문서에 페이스트를 복사할 수 있는 텍스트를 인쇄하려고 하다가 우연히 이 문제를 발견했습니다.이 답변을 확장하여 명명된 대체 필드를 사용합니다.

예를 들어, 라텍스에서는 다음과 같은 인덱스를 가진 다중 변수의 제품을 인쇄하려고 합니다.$A_{ 0042 }*A_{ 3141 }*A_{ 2718 }*A_{ 0042 }$다음 코드는 많은 인덱스에서 읽을 수 있도록 명명된 필드로 작업을 수행합니다.

idx_mapping = {'i1':42, 'i2':3141, 'i3':2178 }
print('$A_{{ {i1:04d} }} * A_{{ {i2:04d} }} * A_{{ {i3:04d} }} * A_{{ {i1:04d} }}$'.format(**idx_mapping))

"따옴표 벽"을 사용하여 포맷된 문자열 부분을 일반 문자열 부분과 구분할 수 있습니다.

송신원:

print(f"{Hello} {42}")

로.

print("{Hello}"f" {42}")

보다 명확한 예는

string = 10
print(f"{string} {word}")

출력:

NameError: name 'word' is not defined

이제 다음과 같이 견적 벽을 추가합니다.

string = 10
print(f"{string}"" {word}")

출력:

10 {word}

fstring value injection을 방지하기 위해 더블 {{}}을(를) 사용했습니다.

예를 들어 어레이를 캡처하는 데 {}의 식이 필요한 정수 어레이 열을 업데이트하기 위한 Postgres UPDATE 문입니다. 즉,

포트 = '{100,200,300}'

그것을 구부리고,

ports = [1,2,3]

query = f"""
   UPDATE table SET ports = '{{{ports}}}' WHERE id = 1
"""

실제 쿼리 문장은 다음과 같습니다.

UPDATE table SET ports = '{1,2,3}'

이것은 유효한 포스트그레스먼트입니다.

곱슬곱슬한 괄호의 한쪽 면만 인쇄하는 경우:

a=3
print(f'{"{"}{a}')
>>> {3

1개의 곱슬머리 괄호만 인쇄하는 경우(예:{)를 사용할 수 있습니다.{{필요에 따라 스트링 뒤에 중괄호를 추가할 수 있습니다.예를 들어 다음과 같습니다.

>>> f'{{ there is a curly brace on the left. Oh, and 1 + 1 is {1 + 1}'
'{ there is a curly brace on the left. Oh, and 1 + 1 is 2'

코드 스트링을 보간하려고 할 때는 Python용 풀기능 템플릿엔진인 jinja2를 사용하는 것이 좋습니다.

from jinja2 import Template

foo = Template('''
#include <stdio.h>

void main() {
    printf("hello universe number {{number}}");
}
''')

for i in range(2):
    print(foo.render(number=i))

그래서 다른 모든 답변에서 알 수 있듯이 곱슬곱슬한 괄호를 복제하도록 강요당하지 않을 것이다.

포맷 가능한 f-string 템플릿 내에서 컬리브래치가 필요한 경우 f-string의 컬리브래치 세트 내에서2개의 컬리브래치가 포함된 문자열을 출력해야 합니다.

css_template = f"{{tag}} {'{{'} margin: 0; padding: 0;{'}}'}"
for_p = css_template.format(tag="p")
# 'p { margin: 0; padding: 0;}'

아니면 브래킷 자체를 매개 변수화할까요?아마 아주 장황하게 말했을 거야.

x = '{open_bracket}42{close_bracket}'.format(open_bracket='{', close_bracket='}') 
print(x)
# {42}

언급URL : https://stackoverflow.com/questions/5466451/how-do-i-escape-curly-brace-characters-in-a-string-while-using-format-or

반응형