Я бы просто заменил '*'
во входной строке (или это '#'
? Ваш вопрос неясен ... повествование говорит об одном, код подразумевает другое) на ".*?"
, а затем использовал бы всеСтрока как ваш шаблон. Например:
static void Main(string[] args)
{
string input = "flour*yeast*banana";
string[] searchblock = new string[4] { "flouryeastbanana", "flouraddyeastmashbanana", "flouraddyeastbanana", "yeastflourbanana" };
string pattern = input.Replace("*", ".*?");
foreach (string s in searchblock)
{
if (System.Text.RegularExpressions.Regex.IsMatch(s, pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase))
{
Console.WriteLine($"input \"{s}\": (match for '{pattern}' found)");
}
}
}
Последовательность ".*?"
в регулярном выражении говорит, что соответствует любому количеству любого символа с наименьшим количеством символов, которое все еще позволит совпадению быть успешным. Используя его вместо маркера во входной строке, это позволяет любой строке с вашими немаркерными строками, разделенными любыми другими символами, совпадать.
Обратите внимание, что ?
в строке, вероятно, необязательно втвой случай. Это будет иметь незначительное различие в том, где совпадения произошли, если вы представили шаблон со строками, которые включали немаркерные строки несколько раз, но не должны влиять на , действительно ли строки совпадают или нет. Поэтому, если вы предпочитаете, вы могли бы просто использовать ".*"
в качестве текста замены вместо ".*?"
.