1

我有一个需要转换的字符串,以便将第一个字符转换为大写。使用 ToTitleCase 方法它可以正常工作,除了有特殊字符的情况。

以下是代码和预期结果

String textToConvert= "TEST^S CHECK"
TextInfo myTI = new CultureInfo("en-US",false).TextInfo;
       return myTI.ToTitleCase(textToConvert.ToLower())

预期结果:Test^s Check 但结果是 Test^S Check,特殊字符后“S”转换为大写 ^

无论如何要将转换更改为预期结果

4

2 回答 2

2

ToTitleCase是一种方便的方法,但如果您需要更细粒度的控制,Regex 可能是更好的选择:

string titleCase = Regex.Replace(textToConvert.ToLower(), @"^[a-z]|(?<= )[a-z]",
    match => match.Value.ToUpper());

^[a-z]|(?<=\s)[a-z]将匹配字符串开头的字母,以及前面有空格(空格、制表符或换行符)的字母。

于 2019-12-09T11:35:13.323 回答
1

好吧,ToTitleCase每个单词的第一个字母转为大写,而将其他所有字母转为小写。 .Net 中的Word是一个随之而来的字母,而且,唉,^它不是一个字母,这就是为什么TEST^S2单词组成。

我们可以将 word 重新定义为

  • 单词必须从字母开始
  • 单词可以包含字母、撇号'、抑扬符^和句号.

在这种情况下,我们可以使用正则表达式

  using System.Text.RegularExpressions;

  ... 

  string source = "TEST^S CHECK по-русски (in RUSSIAN) it's a check! a.b.c.d";

  string result = Regex.Replace(source, @"\p{L}[\p{L}\^'\.]*",
    match => match.Value.Substring(0, 1).ToUpper() + match.Value.Substring(1).ToLower());

  Console.Write(result);

结果:

  Test^s Check По-Русски (In Russian) It's A Check! A.b.c.d
于 2019-12-09T11:45:50.260 回答