Поиск, если чартер существует один в строке C#
Я хочу найти (в VS C#), если строка содержит символ (например, "%") без немедленных повторений.
Например, "у меня есть только%, и это нормально =>%%" . Я хочу найти любую строку, которая содержит один '%' (даже пару раз), независимо от примыкающих вхождений "%%".
Следующее явно не будет работать, и даст true
за foo2
:
string foo1="% I want to find this string";
string foo2="I don't want to find this string because the char %% is not alone";
string foo3="I%want%to%find%this%as%well!"
if(line.Contains("%")){}
Я попытался понять, как применять регулярные выражения здесь, без пользы.
2 ответа
Перемещая мой комментарий сюда:
Вы также можете использовать подход без регулярных выражений для этого:
if (s.Contains("%") && !s.Contains("%%"))
Если вам нужно использовать регулярное выражение, вы можете использовать отрицательный взгляд с Regex.IsMatch
:
if(Regex.IsMatch(line, @"(?<!%)%(?!%)")) {}
Смотрите это регулярное выражение.
(?<!%)
отрицательный взгляд за спиной провалит матч, если %
предшествует %
и (?!%)
отрицательный прогноз не удастся сопоставить, если %
сопровождается %
,
Я опубликую в качестве ответа, так как комментарии иногда могут быть пропущены другими пользователями.
Таким образом, простое решение, если регулярное выражение не нужно, может быть:
if(line.Contains("%") && !line.Contains("%%"))
{
// string ok
}
Как отмечают другие, вы должны проверить, %
содержится в строке вообще.