将 C# 中的字符串(不是数字或日期)格式化为给定模式
Format a string in C# (not number or date) to a given pattern
是否有类似 string.format
的格式化字符串,我可以在其中传递目标模式。 string.format
似乎仅用于格式化数字和模式以及在给定位置内插入值。在给定模式后格式化字符串是否有比自己编程的通用解决方案?
我想给出目标模式和输入字符串,然后按照我提供的模式输出字符串。
我可以举一些例子。
Input Output Input pattern (idea)
---------------------------------------------------------
123.456.001 00123.456.001 00000.000.###
D1234567 D-123-4567 D-000-#### (where D is literal)
所以,我的问题是:有没有一种方法可以将 string
格式化为给定的模式,就像数字和日期一样?
String.Format()
这真的不可能。您需要使用正则表达式或类似表达式来剖析模式的不同部分。
对于您的示例,解决方案可能是
public string ReplacePattern(string input)
{
var match = Regex.Match(input, @"([A-Z])(\d{3})(\d{4})");
if(match.Groups.Count == 4) // The first group is always the input
{
return String.Format("{0}-{1}-{2}", match.Groups.Skip(1).Take(3).ToArray());
}
return "";
}
编辑:我忘了:当然你总是可以使用正则表达式替换:
public string ReplacePattern(string input)
{
return Regex.Replace(input, @"([A-Z])(\d{3})(\d{4})", "--");
}
我会考虑为您需要的每种不同格式制作客户格式化程序 类。下面有一个非常简单的示例,没有错误处理等...
// custom formatter class
public class FormatD : IFormattable
{
public string ToString(string format, IFormatProvider provider)
{
return format[0] + "-" + format.Substring(1,3) + "-" + format.Substring(4);
}
}
致电:
var input = "D1234567";
var ouput = String.Format("{0:" + input + "}", new FormatD());
是否有类似 string.format
的格式化字符串,我可以在其中传递目标模式。 string.format
似乎仅用于格式化数字和模式以及在给定位置内插入值。在给定模式后格式化字符串是否有比自己编程的通用解决方案?
我想给出目标模式和输入字符串,然后按照我提供的模式输出字符串。
我可以举一些例子。
Input Output Input pattern (idea)
---------------------------------------------------------
123.456.001 00123.456.001 00000.000.###
D1234567 D-123-4567 D-000-#### (where D is literal)
所以,我的问题是:有没有一种方法可以将 string
格式化为给定的模式,就像数字和日期一样?
String.Format()
这真的不可能。您需要使用正则表达式或类似表达式来剖析模式的不同部分。
对于您的示例,解决方案可能是
public string ReplacePattern(string input)
{
var match = Regex.Match(input, @"([A-Z])(\d{3})(\d{4})");
if(match.Groups.Count == 4) // The first group is always the input
{
return String.Format("{0}-{1}-{2}", match.Groups.Skip(1).Take(3).ToArray());
}
return "";
}
编辑:我忘了:当然你总是可以使用正则表达式替换:
public string ReplacePattern(string input)
{
return Regex.Replace(input, @"([A-Z])(\d{3})(\d{4})", "--");
}
我会考虑为您需要的每种不同格式制作客户格式化程序 类。下面有一个非常简单的示例,没有错误处理等...
// custom formatter class
public class FormatD : IFormattable
{
public string ToString(string format, IFormatProvider provider)
{
return format[0] + "-" + format.Substring(1,3) + "-" + format.Substring(4);
}
}
致电:
var input = "D1234567";
var ouput = String.Format("{0:" + input + "}", new FormatD());