Вам нужно немного разбора, чтобы сделать это. Вы можете искать экранированные кавычки, строку в кавычках или текст, который вы хотите сопоставить, и анализировать, что вы получаете. Что-то вроде:
MatchCollection matches = Regex.Matches(
input,
"(/\"|/'|\"[^\"]*\"|'[^']*'|" + Regex.Escape("//bazinga") + ")"
);
Выполняя поиск экранированных кавычек, затем строк в кавычках, затем текста, вы убедитесь, что строка в кавычках не экранирована и что текст не находится внутри строки в кавычках.
Если какой-либо из текстов является вашим текстом, вы нашли его.
Редактировать
С этим входом:
string input = "asdf /\" /' '//bazinga' \"//bazinga\" //bazinga";
Я провел матч, а затем показал результат, используя:
foreach (Match match in matches) {
Console.WriteLine("{0} {1}", match.Index, match.Value);
}
Выход:
5 /"
8 /'
11 '//bazinga'
24 "//bazinga"
36 //bazinga
Вы можете использовать такой код, чтобы получить индексы фактических попаданий в коллекции совпадений:
int[] found =
matches.Cast<Match>()
.Where(m => m.Value == "//bazinga")
.Select(m => m.Index)
.ToArray();