C#如何同时将特定小写字母转换为大写字母和小写字母

时间:2017-03-29 10:31:15

标签: c#

我想用字符串对应的字符串交换字符串中所有出现的字符。

例如:

  

"%Y%m%d | %H:%M:%S"

应该成为

  

"%Y%M%d | %H:%M:%S"

为角色' m'或者' M'。

我怎样才能在C#中做到最好?

2 个答案:

答案 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));