我是否可以使用与相反情况匹配的反向引用创建正则表达式

时间:2011-11-18 20:11:44

标签: .net regex

我需要匹配一个以大写字母开头的模式,后跟一系列相同的小写字母,然后以相同的字母再次大写。

应该匹配:

XxxxX
NnN
YyyyyyyY

不匹配:

XyyyX
XxxxB
XyyyZ

我知道如何使用反向引用匹配两个大写字母,但我不知道如何捕获字母需要相同但不同情况的中间部分。

感谢。

2 个答案:

答案 0 :(得分:1)

您无法在单个正则表达式中完成所有操作。您可以使用正则表达式测试大部分内容,但需要单独测试以查看大写和小写字母是否相同:

Match match = Regex.Match(s, @"^([A-Z])([a-z])+\1$");
if (match.Success && match.Groups[1].Value.Equals(match.Groups[2].Value,
    StringComparison.InvariantCultureIgnoreCase)) {
    // OK
}

注意:这里我假设你只想要A-Z。

答案 1 :(得分:0)

这是 -regex答案。

    if (char.IsUpper(subjectString[0])
        && char.IsLetter(subjectString[0])
        && subjectString[0].Equals(subjectString[subjectString.Length - 1])
        && subjectString.Substring(1, subjectString.Length - 2).All(x => x.Equals(char.ToLower(subjectString[0]))))
    {
        Console.WriteLine("Success");
    }