C# 要匹配并返回组名的正则表达式

C# 要匹配并返回组名的正则表达式,c#,regex,C#,Regex,我需要匹配以下字符串并以组的形式返回值: abctic abctac xyztic xyztac ghhtic ghhtac 使用分组写入的模式如下所示: (?<arch>[abc,xyz,ghh])(?<flavor>[tic,tac]$) (?[abc,xyz,ghh])(?[tic,tac]$) 以上仅返回部分组名。(表示匹配不正确) 如果我在每个子模式中使用*而不是在最后使用$,则组是正确的,但这意味着abcticff也将匹配 请告诉我正确的正则表达式应该是

我需要匹配以下字符串并以组的形式返回值:

abctic
abctac
xyztic
xyztac
ghhtic
ghhtac
使用分组写入的模式如下所示:

(?<arch>[abc,xyz,ghh])(?<flavor>[tic,tac]$)
(?[abc,xyz,ghh])(?[tic,tac]$)
以上仅返回部分组名。(表示匹配不正确)

如果我在每个子模式中使用
*
而不是在最后使用
$
,则组是正确的,但这意味着abcticff也将匹配


请告诉我正确的正则表达式应该是什么。

您的模式不正确,因为管道符号
|
用于指定替代匹配,而不是您使用的括号中的逗号,即
[x,y]

您的模式应该是:
^(?abc | xyz | ghh)(?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);
}
string[]输入={“abctic”、“abctac”、“xyztic”、“xyztac”、“ghhtic”、“ghhtac”};
字符串模式=@“^(?abc|xyz|ghh)(?tic|tac)$”;
foreach(输入中的var输入)
{
var match=Regex.match(输入,模式);
如果(匹配成功)
{
WriteLine(“Arch:{0}-Flavor:{1}”,
匹配。组[“拱门”]。值,
匹配。组[“味道”]。值);
}
其他的
Console.WriteLine(“不匹配:”+输入);
}

这是我的模式。(?[abc,xyz,ghh])(?[tic,tac]$)非常感谢艾哈迈德!我没有意识到我在用,。再次感谢。