programing tip

.NET의 형식 문자열에서 중괄호 (중괄호)를 이스케이프하는 방법

itbloger 2020. 9. 28. 08:24
반응형

.NET의 형식 문자열에서 중괄호 (중괄호)를 이스케이프하는 방법


을 사용하여 대괄호를 어떻게 이스케이프 할 수 있습니까 string.Format? 예를 들면 :

String val = "1,2,3"
String.Format(" foo {{0}}", val); 

이 예제는 예외를 throw하지 않지만 문자열을 출력합니다. foo {0}

괄호를 피할 수있는 방법이 있습니까?


출력 foo {1, 2, 3}하려면 다음과 같이해야합니다.

string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);

A 출력에 {사용 {{하고 출력에 }당신이 사용 }}.


예 출력 {에서 string.Format당신이처럼 탈출해야{{

그래서 이거

String val = "1,2,3";
String.Format(" foo {{{0}}}", val);

출력 "foo {1,2,3}"됩니다.

그러나 C #의 디자인 버그에 대해 알아야합니다. 위의 논리를 수행하면 아래 코드가 {24.00}을 인쇄한다고 가정합니다.

int i = 24;
string str = String.Format("{{{0:N}}}", i); //gives '{N}' instead of {24.00}

그러나 이것은 {N}을 인쇄합니다. 이는 C #이 이스케이프 시퀀스를 구문 분석하고 문자를 형식화하는 방식 때문입니다. 위의 경우 원하는 값을 얻으려면 대신 이것을 사용해야합니다.

String.Format("{0}{1:N}{2}", "{", i, "}") //evaluates to {24.00}

참조 기사 String.Format gottachString Formatting FAQ


거의 다 왔어! 중괄호의 이스케이프 시퀀스는 다음 {{}}같습니다.

string t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);

페이지에 하나의 대괄호 만 표시하는 이중 여는 대괄호와 이중 닫는 대괄호를 사용할 수 있습니다.


중괄호를 이스케이프 하고 문자열 보간을 사용하면 흥미로운 문제가 발생합니다. 문자열 보간 구문 분석 및 구문 분석 을 이스케이프 하려면 4 중 괄호 를 사용해야 합니다.string.format

이스케이프 대괄호 : 문자열 보간 $ ( "") 및 String.Format

string localVar = "dynamic";
string templateString = $@"<h2>{0}</h2><div>this is my {localVar} template using a {{{{custom tag}}}}</div>";
string result = string.Format(templateString, "String Interpolation");

// OUTPUT: <h2>String Interpolation</h2><div>this is my dynamic template using a {custom tag}</div>

C #에서 (클래스 / 객체를 직렬화하지 않고) 임시로 json 문자열을 빌드하는 방법을 찾기 위해 여기에 왔습니다. 즉, C #에서 Interpolated Strings 및 " verbatim string literals "( '@'접두사가있는 큰 따옴표 문자열) 를 사용하는 동안 중괄호와 따옴표를 이스케이프하는 방법은 다음과 같습니다.

var json = $@"{{""name"":""{name}""}}";

[TestMethod]
public void BraceEscapingTest()
{
    var result = String.Format("Foo {{0}}", "1,2,3");  //"1,2,3" is not parsed
    Assert.AreEqual("Foo {0}", result);

    result = String.Format("Foo {{{0}}}", "1,2,3");
    Assert.AreEqual("Foo {1,2,3}", result);

    result = String.Format("Foo {0} {{bar}}", "1,2,3");
    Assert.AreEqual("Foo 1,2,3 {bar}", result);

    result = String.Format("{{{0:N}}}", 24); //24 is not parsed, see @Guru Kara answer
    Assert.AreEqual("{N}", result);

    result = String.Format("{0}{1:N}{2}", "{", 24, "}");
    Assert.AreEqual("{24.00}", result);

    result = String.Format("{{{0}}}", 24.ToString("N"));
    Assert.AreEqual("{24.00}", result);
}

또는 이와 같이 c # 문자열 보간을 사용할 수 있습니다 (C # 6.0에서 사용 가능한 기능).

var value = "1, 2, 3";
var output = $" foo {{{value}}}";

내 목표 :

나는 값을 할당하는 데 필요한 "{CR}{LF}"A를 string변수 delimiter.

코드 C # :

string delimiter= "{{CR}}{{LF}}";

참고 : 일반적으로 특수 문자를 이스케이프하려면를 사용해야합니다. 중괄호 {를 열려면 {{과 같은 추가 항목을 사용하십시오. 닫는 중괄호}에는 추가}}를 사용하십시오.

참고 URL : https://stackoverflow.com/questions/91362/how-to-escape-braces-curly-brackets-in-a-format-string-in-net

반응형