source

의 형식 문자열에서 가새(곡선 괄호)를 이스케이프하는 방법.그물

manycodes 2023. 4. 26. 23:29
반응형

의 형식 문자열에서 가새(곡선 괄호)를 이스케이프하는 방법.그물

다음을 사용하여 브래킷을 탈출하는 방법string.Format?

예:

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

이 예제는 예외를 발생시키지 않지만 문자열을 출력합니다.foo {0}.

브래킷을 탈출할 수 있는 방법이 있습니까?

사용자가 출력할 수 있습니다. foo {1, 2, 3}다음과 같은 작업을 수행해야 합니다.

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

출력 방법{당신이 사용하는{{그리고 출력하기 위해}당신이 사용하는}}.

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

이스케이프 브래킷: 문자열 보간 $("").C# 6.0의 새로운 기능입니다.

var inVal = "1, 2, 3";
var outVal = $" foo {{{inVal}}}";
// The output will be:  foo {1, 2, 3}

예, 출력으로{string.Format당신은 이렇게 탈출해야 합니다.{{

다음과 같이 출력합니다."foo {1,2,3}".

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

그러나 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 t = "1, 2, 3";
string v = String.Format(" foo {{{0}}}", t);

페이지에 하나의 브래킷만 표시되는 이중 개방 브래킷과 이중 폐쇄 브래킷을 사용할 수 있습니다.

곱슬곱슬한 괄호 AND를 탈출하고 문자열 보간법을 사용하는 은 흥미로운 도전이 됩니다.문자열 보간 파싱을 피하려면 4중괄호를 사용해야 합니다.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#보간 문자열과 "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}"아주string변수delimiter.

C# 코드:

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

참고: 특수 문자를 이스케이프하려면 일반적으로 \를 사용해야 합니다.컬리 브래킷 열기용{하나 더 쓰시오, 예를 예로.{{곱슬곱슬한 브래킷을 닫는 데 사용}하나를 더 쓰면,}}.

이렇게 사용할 수도 있습니다. var outVal = $" foo {"{"}{inVal}{"}"} --- {"{"}Also Like This{"}"}"

탈출 브래킷:문자열 보간 $("""):

이제 C# 문자열 보간을 다음과 같이 사용할 수도 있습니다(C# 6.0에서 사용 가능한 기능).

var inVal = "1, 2, 3";
var outVal = $" foo {{{inVal}}}";
// The output will be:  foo {1, 2, 3}

는 탈출싶었하고다니습.{{Id}}내가 끈으로 된 인터폴에 있는 동안.

이것은 저에게 효과가 있었습니다.

string url = $"/Details/{{{{Id}}}}";

출력:

/Details/{{Id}}

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

반응형