Поиск, если чартер существует один в строке 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 
}

Как отмечают другие, вы должны проверить, % содержится в строке вообще.

Другие вопросы по тегам