C# 设置字符串的格式,使数字前面的字母大写,后面的字母小写
本文关键字:数字 字符串 设置 格式 前面 | 更新日期: 2023-09-27 18:36:51
我正在尝试在 c# 中格式化字符串,如果模型名称是 md234GH 和 Dgh321Hh 它们需要是 MD234gh 和 DGH321hh,我不确定我是否应该使用正则表达式或类似的东西。
所以大写数字小写
我尝试执行以下操作:
TextInfo textInfo = new CultureInfo("en-GB", false).TextInfo;
foreach (var product in products)
{
if (product.ModelName != null)
{
product.ModelName = product.ModelName.ToLower();
product.ModelName = textInfo.ToTitleCase(product.ModelName);
}
}
但这只会使第一个字母大写。
任何建议表示赞赏
ToTitleCase
的意思只是使每个单词的第一个字母大写。 要执行所需的操作,您需要拆分字符串并根据需要调用.ToUpper
和.ToLower
,例如:
Regex modelExpression = new Regex("^([A-Za-z]+)([0-9]+)([A-Za-z]+)$");
// Inside for loop...
Match m = modelExpression.Match(product.ModelName);
if (m.Success)
{
product.ModelName = m.Groups[1].Value.ToUpper()
+ m.Groups[2].Value
+ m.Groups[3].Value.ToLower();
}
您可以使用正则表达式:
(?i)^([a-z]+)('d+)([a-z]+)$
在替换中,如下所示:
model = Regex.Replace(model, @"(?i)^([a-z]+)('d+)([a-z]+)$", delegate(Match m)
{
return m.Groups[1].Value.ToUpper() + m.Groups[2].Value + m.Groups[3].Value.ToLower();
});
ToTitleCase
只会使每个单词的第一个字母大写。
您需要使用 ToUpper
将所有字母设为大写。
没有内置的东西可以做你想做的事情,所以你需要自己做 - 解析数字之间的字符串并格式化每个部分。
正则表达式看起来是最好的选择:
^([A-Za-z]+)([0-9]+)([A-Za-z]+)$
用法:
var formatted = Regex.Replace(originalString,
@"^([A-Za-z]+)([0-9]+)([A-Za-z]+)$",
m => m.Groups[1].Value.ToUpper() +
m.Groups[2].Value +
m.Groups[3].Value.ToLower());
"md234GH"的结果是"MD234gh","Dgh321Hh"的结果是"DGH321hh"。
using System.Text.RegularExpressions;
Match m=Regex.Match("md234GH","(''w+?)(''d+)(''w+)");
Console.WriteLine("{0}{1}{2}",m.Groups[1].Value.ToUpper(),m.Groups[2].Value,m.Groups[3].Value.ToLower());
正
则表达式非常适合:
'b('D+)('d+)('D+)'b
现在所需要的只是在 C# 中使用正则表达式 api,并给它一个执行替换的委托。我使用了一个 lambda 作为委托:
var result = Regex.Replace("md234GH", @"'b('D+)('d+)('D+)'b", x =>
x.Groups[1].Value.ToUpper()
+ x.Groups[2].Value
+ x.Groups[3].Value.ToUpper()
);
这是普通 C 中的解决方案。这假定使用 8 位 ASCII 或 ANSI 字符集。
void convertModelName(char *name)
{
char *ptr;
int lcase = 0;
for (ptr=name; *ptr; ptr++) {
if (*ptr >= '0' && *ptr <= '9') {
lcase = 1;
} else {
if (lcase) {
*ptr |= 0x20;
} else {
*ptr &= 0xdf;
}
}
}
}