2010-08-31 138 views
1

我需要符合下列字符串和返回值組:正則表達式匹配,返回的組名

abctic 
abctac 
xyztic 
xyztac 
ghhtic 
ghhtac 

模式與分組寫道如下:

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

以上的回報只有部分組名。 (意思是匹配不正確)。

如果我在每個子模式中使用*而不是$最後,組是正確的,但這意味着abcticff也會匹配。

請讓我知道我的正確的正則表達式應該是什麼。

+0

這裏是我的模式。 (? [abc,xyz,ghh])(? [tic,tac] $) – user393148 2010-08-31 18:24:52

回答

2

您的圖案不正確,因爲管道符號|用於指定替代匹配,而不是您正在使用的括號中的逗號,即[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); 
} 
+0

非常感謝艾哈邁德!我沒有意識到我正在使用,。再次感謝。 – user393148 2010-08-31 18:47:18