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);
    }
}

但这只会使第一个字母大写。

任何建议表示赞赏

C# 设置字符串的格式,使数字前面的字母大写,后面的字母小写

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;
            }
        }
    }
}