2011-11-18 7 views
3

我需要匹配以大写字母开头的模式相匹配的反向引用正则表达式,后面是一系列以小写同一封信中,然后用相同的字母大写结束再次。我可以创建具有相反的情况

应符合:

XxxxX 
NnN 
YyyyyyyY 

不应与:

XyyyX 
XxxxB 
XyyyZ 

我知道如何搭配使用反向引用的两个大写字母,但我不知道如何捕捉中间部分,其中这封信必须是相同的,但情况不同。

谢谢。

回答

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 
} 

注:在这里,我假设你只想要一个-Z。

+0

我认为可能是这种情况。感谢你的回答。我没有想到将“+”放在分组之外,这使得平等测试更容易。 – NerdFury

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"); 
    } 
+0

这会工作。但我的问题并不彻底。这种模式实际上是一个更大的字符串的一部分,我想快速找到这些和鱼目混珠经过处理之后做他们一些卫生。所以手动这样做会更复杂一些。感谢您花时间回答。 – NerdFury

+0

@NerdFury没问题。只是想说明,对于这些正则表达式可能不是唯一的解决方案。另外对于大字符串,这个解决方案实际上可能会更快。 – FailedDev

相关问题