ToTitleCase() 方法不适用于特殊字符
ToTitleCase() method is not working with Special Characters
我有一个字符串需要转换,以便将第一个字符转换为大写。使用 ToTitleCase 方法,它工作正常,但有特殊字符的情况除外。
下面是代码和预期结果
String textToConvert= "TEST^S CHECK"
TextInfo myTI = new CultureInfo("en-US",false).TextInfo;
return myTI.ToTitleCase(textToConvert.ToLower())
预期结果:测试^s 检查
但结果是 Test^S Check with "S" converted to capital after special character ^
是否可以将转换更改为预期结果
ToTitleCase
是一种方便的方法,但如果您需要更细粒度的控制,Regex 可能是更好的选择:
string titleCase = Regex.Replace(textToConvert.ToLower(), @"^[a-z]|(?<= )[a-z]",
match => match.Value.ToUpper());
^[a-z]|(?<=\s)[a-z]
将匹配字符串开头的字母,以及以白色开头的字母space(space、制表符或换行符)。
好吧,ToTitleCase
将 每个单词的第一个字母 转为大写,同时将其他所有字母转为小写。
Word 在 .Net 中是一个 后续字母 ,而且,唉, ^
不是一个字母,这就是为什么 TEST^S
由 2
个单词组成。
我们可以将单词重新定义为
- 单词必须从字母开始
- 单词可以包含字母、撇号
'
、抑扬符^
和句号.
在这种情况下我们可以使用正则表达式:
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
我有一个字符串需要转换,以便将第一个字符转换为大写。使用 ToTitleCase 方法,它工作正常,但有特殊字符的情况除外。
下面是代码和预期结果
String textToConvert= "TEST^S CHECK"
TextInfo myTI = new CultureInfo("en-US",false).TextInfo;
return myTI.ToTitleCase(textToConvert.ToLower())
预期结果:测试^s 检查 但结果是 Test^S Check with "S" converted to capital after special character ^
是否可以将转换更改为预期结果
ToTitleCase
是一种方便的方法,但如果您需要更细粒度的控制,Regex 可能是更好的选择:
string titleCase = Regex.Replace(textToConvert.ToLower(), @"^[a-z]|(?<= )[a-z]",
match => match.Value.ToUpper());
^[a-z]|(?<=\s)[a-z]
将匹配字符串开头的字母,以及以白色开头的字母space(space、制表符或换行符)。
好吧,ToTitleCase
将 每个单词的第一个字母 转为大写,同时将其他所有字母转为小写。
Word 在 .Net 中是一个 后续字母 ,而且,唉, ^
不是一个字母,这就是为什么 TEST^S
由 2
个单词组成。
我们可以将单词重新定义为
- 单词必须从字母开始
- 单词可以包含字母、撇号
'
、抑扬符^
和句号.
在这种情况下我们可以使用正则表达式:
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