【问题标题】:Regex to match and return group names正则表达式匹配并返回组名
【发布时间】:2010-08-31 18:22:29
【问题描述】:

我需要匹配以下字符串并将值作为组返回:

abctic
abctac
xyztic
xyztac
ghhtic
ghhtac

用分组写的模式如下:

(?<arch>[abc,xyz,ghh])(?<flavor>[tic,tac]$)

上面只返回组名的一部分。 (意思是匹配不正确)。

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

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

【问题讨论】:

  • 这是我的模式。 (?[abc,xyz,ghh])(?[tic,tac]$)

标签: c# regex


【解决方案1】:

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

你的模式应该是:^(?&lt;arch&gt;abc|xyz|ghh)(?&lt;flavor&gt;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);
}

【讨论】:

  • 非常感谢艾哈迈德!我没有意识到我正在使用,。再次感谢。
猜你喜欢
  • 2022-01-14
  • 1970-01-01
  • 1970-01-01
  • 2015-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多