У меня есть следующий код. Он работает так, как планировалось, но я просто хотел знать, могу ли я изменить логику, стоящую за ней, чтобы она выглядела проще, потому что я считаю ее излишней.Можно ли упростить эту попытку и логику?
Он работает следующим образом: я извлекаю некоторые данные, а затем пытаюсь передать их через регулярное выражение. Возможны три возможных результата:
- Данные получены нормально.
- Данные извлекаются, но не содержат числа. Поэтому передается другое регулярное выражение.
- Данные не получены. Такое же регулярное выражение, как и 2).(это то, что я считаю, может быть упрощена или оптимизированы)
Сначала я подумал, что может быть способ проверки, если регулярное выражение возвращает пустой или нет, не бросать исключение, но (поправьте меня если я ошибаюсь), нет такой вещи ... поэтому я включил try/catch. Без него, если 3-й случай встречен, IF возвращает исключение, потому что он говорит, что m2[0].Groups[1].Captures[0].Value
, конечно, вне границ (потому что он пуст).
Итак ... есть ли способ сделать этот взгляд более оптимизированным? Большое спасибо!
string regexString = @" \.\.\. .*?>(.*?)<\/a>";
MatchCollection m2 = Regex.Matches(myInput, regexString, RegexOptions.Singleline);
try
{
if (m2[0].Groups[1].Captures[0].Value.All(Char.IsDigit) == false)
{
regexString = @"page=.*?"">(.*?)</a>\n.*?<a class=""pagebtn""";
m2 = Regex.Matches(myInput, regexString);
}
}
catch (ArgumentException)
{
regexString = @"page=.*?"">(.*?)</a>\n.*?<a class=""pagebtn""";
m2 = Regex.Matches(myInput, regexString);
}
Вы должны решить исключение. Какое конкретное высказывание выдает, 'm2 [0] .Groups [1]. Захваты [0]. Значение. Думаю? Это строка, поэтому достаточно 'string.IsNullOrWhiteSpace()'. Экземпляр 'Regex' имеет свойство' bool IsMatch', которое вы можете проверить. – CodeCaster
Единственный способ решить это будет проверять, является ли результат регулярного выражения пустым. И это часть моего вопроса, потому что я понятия не имею, можно ли это сделать. Вот почему я использую try/catch. – Arturo
@CodeCaster Использование Regex.IsMatch потребует от меня ввода точной строки, которую я ожидаю получить, не так ли? Но дело в том, что я знаю только, что он должен быть целым числом, и больше ничего. – Arturo