我需要符合下列字符串和返回值組:正則表達式匹配,返回的組名
abctic
abctac
xyztic
xyztac
ghhtic
ghhtac
模式與分組寫道如下:
(?<arch>[abc,xyz,ghh])(?<flavor>[tic,tac]$)
以上的回報只有部分組名。 (意思是匹配不正確)。
如果我在每個子模式中使用*
而不是$
最後,組是正確的,但這意味着abcticff也會匹配。
請讓我知道我的正確的正則表達式應該是什麼。
我需要符合下列字符串和返回值組:正則表達式匹配,返回的組名
abctic
abctac
xyztic
xyztac
ghhtic
ghhtac
模式與分組寫道如下:
(?<arch>[abc,xyz,ghh])(?<flavor>[tic,tac]$)
以上的回報只有部分組名。 (意思是匹配不正確)。
如果我在每個子模式中使用*
而不是$
最後,組是正確的,但這意味着abcticff也會匹配。
請讓我知道我的正確的正則表達式應該是什麼。
您的圖案不正確,因爲管道符號|
用於指定替代匹配,而不是您正在使用的括號中的逗號,即[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);
}
非常感謝艾哈邁德!我沒有意識到我正在使用,。再次感謝。 – user393148 2010-08-31 18:47:18
這裏是我的模式。 (? [abc,xyz,ghh])(? [tic,tac] $) –
user393148
2010-08-31 18:24:52