我需要匹配以下字符串并将值作为组返回:
abctic
abctac
xyztic
xyztac
ghhtic
ghhtac
使用分组编写模式如下:
(?<arch>[abc,xyz,ghh])(?<flavor>[tic,tac]$)
以上仅返回组名的部分内容。 (意思是匹配不正确)。
如果我在每个子模式中使用*
而不是$
,那么群组是正确的,但这意味着abctic也会匹配。
请告诉我正确的正则表达式应该是什么。
答案 0 :(得分:3)
您的模式不正确,因为管道符号|
用于指定备用匹配,而不是您使用的括号中的逗号,即[x,y]
。
您的模式应为:^(?<arch>abc|xyz|ghh)(?<flavor>tic|tac)$
^
和$
元字符确保字符串从头到尾匹配。如果您需要匹配较大字符串中的文字,可以将其替换为\b
以匹配字边界。
尝试这种方法:
string[] inputs = { "abctic", "abctac", "xyztic", "xyztac", "ghhtic", "ghhtac" };
string pattern = @"^(?<arch>abc|xyz|ghh)(?<flavor>tic|tac)$";
foreach (var input in inputs)
{
var match = Regex.Match(input, pattern);
if (match.Success)
{
Console.WriteLine("Arch: {0} - Flavor: {1}",
match.Groups["arch"].Value,
match.Groups["flavor"].Value);
}
else
Console.WriteLine("No match for: " + input);
}