あなたはfollowing regexを試してみてください:
(?s)(?<bndr>\$"|(?!^)\G) # Get the start of the interpolated string literal or the end of previous match
(?:
(?<var>{[^}]*}) # Match a variable {non-braces-inside}
| # OR...
(?<literal>(?:\\.|{{|}}|[^"\\{}])*) # Escaped entities or everything else
)
は、このC#のデモの結果を参照してください:入社matches
とcheck_string
(実際の補間された文字列)の出力から構築されてい
var Variable = "";
var input_text = "$\"text1 {Variable} \\\"Text\\\" {{NotVariable}}\"";
var pat = @"(?s)(?<bndr>\$""|(?!^)\G)(?:(?<var>{[^}]*})|(?<literal>(?:\\.|{{|}}|[^""\\{}])*))";
var matches = Regex.Matches(input_text, pat)
.Cast<Match>()
.Select(p => p.Groups["var"].Success ? p.Groups["var"].Value.Trim(' ', '{', '}') : "\"" + p.Groups["literal"].Value.Replace("{{", "{").Replace("}}", "}") + "\"")
.ToList();
matches.RemoveAll(p => p == "\"\"");
Console.WriteLine(string.Join(" + ", matches)); //"text1 " + Variable + " \"Text\" {NotVariable}"
var result_string = "text1 " + Variable + " \"Text\" {NotVariable}" + ""; //text1 "Text" {NotVariable}
var check_string = $"text1 {Variable} \"Text\" {{NotVariable}}"; //text1 "Text" {NotVariable}
result_string
が等しいです。
あなたは文字列 '{変数} \"テキスト\ {NotVariable \} \ ""を処理しなければならないということですか? –
"{Variable} Text \ {NotVariable \}"という文字列を2つの異なる文字列に変換する必要があります。 – user3265569
まあ、補間された文字列で '{'と '}をエスケープすると、それらを倍加することを意味します。したがって、この例は '$" {Variable} \ "Text \" {{NotVariable}} "'を読み、 'Variable +" \ "Text \" {{NotVariable}} "'に変換する必要があります。 –