我想用字符串对应的字符串交换字符串中所有出现的字符。
例如:
"%Y%m%d | %H:%M:%S"
应该成为
"%Y%M%d | %H:%M:%S"
为角色' m'或者' M'。
我怎样才能在C#中做到最好?
答案 0 :(得分:1)
你可以使用正则表达式......这里有两种可能性:
使用两个不同的分组并选择在替换函数中使用哪个分组:
var rx1 = new Regex("(%M)|(%m)");
string original1 = "%Y %m %d | %H:%M:%S";
string modified1 = rx1.Replace(original1, x => x.Groups[1].Success ? "%m" : "%M");
另一个只需查看匹配文本的替换函数。
var rx2 = new Regex("%[Mm]");
string original2 = "%Y %m %d | %H:%M:%S";
string modified2 = rx2.Replace(original2, x => x.Value == "%M" ? "%m" : "%M");
就像一个好奇心一样,我会添加两个正则表达式来处理%
与另一个%
的转义:%m
是月,%%m
是字符串%m
,%%%m
是%
加上月份。
var rx1 = new Regex("(?<=(?:^|[^%])(?:%%)*)(?:(%M)|(%m))");
和
var rx2 = new Regex("(?<=(?:^|[^%])(?:%%)*)%[Mm]");
答案 1 :(得分:0)
对于ASCII字母,6ᵗʰ位可用于在大写和小写之间切换:
var s = "%Y %m %d | %H:%M:%S";
s = string.Concat(s.Select(c => (c | 32) == 'm' ? (char)(c ^ 32) : c));