Что ж, я вижу, вы хотите сделать это в одной строке кода, есть несколько способов сделать это (предполагая, что ваша строка всегда будет следовать указанному вами шаблону и не будет включать лишние скобки блока) .
Использование Split()
Метод:
1) input.Split('[')?.LastOrDefault()?.Split(']')?.FirstOrDefault()
2) input.Split('[', ']')[1]
Использование Substring()
Метод:
1) input.Substring(input.IndexOf('[') + 1, input.IndexOf(']') - input.IndexOf('[') - 1)
Использование Regex
Выражение:
1) Regex.Match(input, @"\[([^)]*)\]")?.Groups[1]?.Value
Использование Linq
Expression:
1) new string(input.Skip(input.IndexOf('[') + 1).Take(input.IndexOf(']') - input.IndexOf('[') - 1).ToArray())
Или, другим способом, вы можете создать stati c метон, если вы используете страницы aspx
, а затем вызвать его в выражении. Примерно так:
public static string ExtractValue(string input)
{
var extractedValue = "";
var splitted = input.Split('[');
if(splitted != null && splitted.Length > 1)
{
var subSplitted = splitted[1].Split(']');
if(subSplitted != null && subSplitted.Length > 0)
{
extractedValue = subSplitted[0];
}
} // This is just to elaborate that you can go multiline in cs page while calling a static method from your aspx page during data Eval.
return extractedValue;
}
И я предполагаю, что вы назовете это так:
<%#
ExtractValue(
(Request.QueryString["lang"] == null ||
Request.QueryString["lang"].ToString() == "e"?
Eval("EditableHtml"): Request.QueryString["lang"].ToString() == "a"?
Eval("EditableHtml_A") : Eval("EditableHtml_T"))
.ToString()
)
%>
PS: Конечно, вам настоятельно необходимо очистить свой лог c с параметрами строки запроса всегда настоятельно рекомендуется использовать многострочность, потому что это значительно увеличивает читаемость кода.