我正在尝试解析给定的字符串,该字符串有点与分隔/
。我需要编写与匹配的正则表达式组路径中的每个段匹配的正则表达式。
范例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();
}
任何建议都欢迎。不幸的是,因为我使用的框架期望使用正则表达式对象,所以我不能简单地拆分字符串。
尝试
var pattern = @"^" + @"/EAN"
+ @"(?:/" + @"(?<producer>[^/]+))?"
+ @"(?:/" + @"(?<category>[^/]+))?"
+ @"(?:/" + @"(?<subcategory>[^/]+))?"
+ @"(?:/" + @"(?<product>[^/]+))?";
注意:我如何替换.
用[^/]
,因为你要使用/
到拆分字符串。注意每个子部分(?
)的可选量词用法
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句