C# c格式化字符串,使数字前的字母为大写,数字后的字母为小写
我正在尝试用c格式化一个字符串,我不确定我是否应该使用正则表达式或类似的东西基本上如果一个模型名是md234GH和Dgh321Hh,它们需要是md234GH和Dgh321Hh 所以大写数字是小写的 我试着做了以下几点:C# c格式化字符串,使数字前的字母为大写,数字后的字母为小写,c#,regex,C#,Regex,我正在尝试用c格式化一个字符串,我不确定我是否应该使用正则表达式或类似的东西基本上如果一个模型名是md234GH和Dgh321Hh,它们需要是md234GH和Dgh321Hh 所以大写数字是小写的 我试着做了以下几点: TextInfo textInfo = new CultureInfo("en-GB", false).TextInfo; foreach (var product in products) { if (product.ModelName != null) {
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);
}
}
但这只会使第一个字母大写
任何建议都只会使每个单词的第一个字母大写
您需要使用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。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。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();
}
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();
}
正则表达式与此非常匹配:
\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()
);
正则表达式与此非常匹配:
\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()
);
您可以使用正则表达式:
(?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();
});
您可以使用正则表达式:
(?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();
});
这里有一个普通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;
}
}
}
}
这里有一个普通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;
}
}
}
}