Regex в выражении Linq?
Я пишу короткий С# для анализа XML файла. Но 1 из значений тега может меняться, но всегда включает слова "Быстрый запуск" (без учета случая и пробелов, но должен быть в том же порядке) в предложении where. Я не уверен, как это сделать в SQL-заявлении на С#.
var selected = from cli in doc.Descendants(xmlns+ "Result")
where cli.Element(xmlns + "ResultsLocation").Value == "Assessments-Fast-Startup"
select cli;
Ответы
Ответ 1
Предполагая, что вы ищете точную строку - можете ли вы просто использовать String.Contains
?
var selected = from cli in doc.Descendants(xmlns+ "Result")
where cli.Element(xmlns + "ResultsLocation").Value.Contains("Assessments-Fast-Startup")
select cli;
В противном случае что-то вроде:
var rx = new Regex("fast(.*?)startup", RegexOptions.IgnoreCase);
var selected = from cli in doc.Descendants(xmlns+ "Result")
where rx.IsMatch(cli.Element(xmlns + "ResultsLocation").Value)
select cli;
Ответ 2
регулярное выражение fast[- ]?start[- ]?up
должно работать
где необязательная тире или пробел может быть разделение частей слова
...
where Regex.IsMatch(
cli.Element(xmlns + "ResultsLocation").Value,
"fast[- ]?start[- ]?up",
RegexOptions.IgnoreCase
)
select cli
если вы обнаружите, что вам нужно настроить регулярное выражение, попробуйте тестер регулярных выражений, например http://regexpal.com/
Как @DaveBish упомянул, что с тестом .Contains(...)
может быть отлично, вместо цепочки регулярных выражений или даже .ToLower().Contains(...)
(вам также может понадобиться проверка null
)