Найти экранирование в C#
Изучаю C# и столкнулся с проблемой.
Есть задача извлечь из строки подстроку от кавычки до конца строки или кавычки(неизвестно какой именно, ' или ").
При этом, нужно игнорировать экранированные кавычки \' и \", но учитывать их в длину получившейся подстроки.
Например в метод подается строка "a \"c\"" а выходит a "c" длина 7 символов.
Как я только не сравниваю символы подающей строки, не через равенство не через compare я не могу найти, чем отличается в моей строке ' от \' и, следовательно, длину строки тоже не могу понять правильно.
public static Token ReadQuotedField(string line, int startIndex)
{
int start = startIndex;
int end = startIndex;
char Separator = line[startIndex]; //гарантируется что строка начинается с какой то кавычки.
end++;
while (end != line.Length && (line[end] != Separator))
{
end++;
}
return new Token(line.Substring(start+1, end-start-1), startIndex, Math.Min(end-start+1, line.Length));
}
Ответы (1 шт):
Оказалось, что условия данной задачи подразумевают, что на вход строка подается в строгом соответствии, с @. То есть не "'a\' b'" a @"'a\' b'" и когда мы начинаем работать со строкой, достаточно найти символ '\\' и убрать его из результирующей строки, то есть не нужно сравнивать ' и \' спасибо за внимание, надеюсь кому то пригодится
public static Token ReadQuotedField(string line, int startIndex)
{
int start = startIndex;
int end = startIndex;
char Separator = line[startIndex];
var result = "";
end++;
while ((end != line.Length) && (line[end] != Separator ^ line[end-1] == '\\'))
{
var symbol = line[end];
if (symbol != '\\')
result += symbol;
end++;
}
return new Token(result, startIndex, Math.Min(end-start+1, line.Length));
}