Я пытаюсь проанализировать заданную строку, которая является доброй дорожкой, разделенной /
. Мне нужно написать регулярное выражение, которое будет соответствовать каждому сегменту в пути к соответствующей группе регулярных выражений.Регулярное выражение с необязательными сопоставимыми группами
Пример 1:
вход:
/EAN/SomeBrand/appliances/refrigerators/RF444
выход:
Group: producer, Value: SomeBrand Group: category, Value: appliances Group: subcategory, Value: refrigerators Group: product, Value: RF4441
Пример 2:
вход:
/EAN/SomeBrand/appliances
выход:
Group: producer, Value: SomeBrand Group: category, Value: appliances Group: subcategory, Value: Group: product, Value:
Я попытался следующий код, он отлично работает, когда путь полон (как и в первом exmaple), но не смог найти групп, когда входная строка является беспристрастной (как в примере 2).
static void Main()
{
var pattern = @"^" + @"/EAN"
+ @"/" + @"(?<producer>.+)"
+ @"/" + @"(?<category>.+)"
+ @"/" + @"(?<subcategory>.+)"
+ @"/" + @"(?<product>.+)?"
+ @"$";
var rgx = new Regex(pattern, RegexOptions.Compiled | RegexOptions.IgnoreCase);
var result = rgx.Match(@"/EAN/SomeBrand/appliances/refrigerators/RF444");
foreach (string groupName in rgx.GetGroupNames())
{
Console.WriteLine(
"Group: {0}, Value: {1}",
groupName,
result.Groups[groupName].Value);
}
Console.ReadLine();
}
Любое предложение приветствуется. К сожалению, я не могу просто разбить строку, поскольку используемая среда ожидает объект regex.
Означает ли это, что все ваши детали (в том числе «производитель» и «категория») являются необязательными? –