【发布时间】:2016-06-06 22:51:43
【问题描述】:
我正在尝试解析给定的字符串,它是一种用/ 分隔的路径。我需要编写将路径中的每个段匹配到相应正则表达式组的正则表达式。
示例 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:
我尝试了以下代码,当路径已满时(如在第一个示例中),它可以正常工作,但在输入字符串不偏不倚时无法找到组(如示例 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();
}
欢迎提出任何建议。不幸的是,我不能简单地拆分字符串,因为我使用的框架需要正则表达式对象。
【问题讨论】:
-
这是否意味着您的所有部分(包括
producer和category)都是可选的?
标签: c# regex regex-group