Unicode表达式@" \ p {Lt}"与标题案例字符串不匹配

时间:2016-10-22 22:10:10

标签: c# regex

我正在尝试验证标题案例字符串" Sam And Will"使用unicode表达式\ p {Lt}。但表达式与字符串不匹配。有没有替代方案。请帮忙。谢谢。

MatchCollection matches = Regex.Matches("Sam And Will", @"\p{Lt}");
foreach(Match match in matches)
{
 Console.WriteLine(match.Value);
}

1 个答案:

答案 0 :(得分:1)

Titlecase和大写作为第一个字符是different things

  

问:什么是标题?它与大写有什么不同?
....

     

Unicode中的标题选择映射与大写映射的不同之处在于许多字符需要特殊处理。这些主要是连字和有向图,例如' fl',' dz'和' lj'以及许多多元希腊字符。例如,U + 01C7(LJ)映射到U + 01C8(Lj)而不是U + 01C9(lj)。

如果您添加digraph Dz

char c = '\u01F2';

到源字符串(无论是否在单词的开头),都会被@"\p{Lt}"找到。

BTW,只是为了说明差异,如果你指定一个字符串

CultureInfo ci = CultureInfo.GetCultureInfo("en-US");
string s = c + " " + char.ToLower(c, ci) + " " + char.ToUpper(c);

值为

"Dz dz DZ" // Dz - titlecase, dz - lowercase, DZ - uppercase

对于您的任务,请考虑以下事项:

MatchCollection matches = Regex.Matches(@"Sam And Will", @"\b(\p{Lu})\p{Ll}*\b");
foreach (Match match in matches)
    Console.WriteLine(match.Groups[1].Value);