正则表达式替换每两个字符

时间:2012-07-29 18:59:41

标签: c# regex

我想知道如何每2位数字对字符串进行Regex.Replace。 例如:如果用户键入111213,我想用c替换11,用o替换12,用m替换13。

显然我之前已经为每个字母分配了值,我只是不了解正则表达式告诉它每2位数更换一次。

任何帮助或指向好文章的指针都将不胜感激。

Rafael Ruales。

3 个答案:

答案 0 :(得分:4)

我根本不会尝试使用正则表达式。当我读到它时,你只想取两个字符并用其他东西替换它们。像这样:

private static readonly Dictionary<string, string> Map
    = new Dictionary<string, string> {
    {"11", "c"},
    {"12", "o"},
    {"13", "m"}
};
public static string Rewrite(string input)
{
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < input.Length; i += 2)
    {
        string value = input.Substring(i, 2);
        sb.Append(Map[value]);
    }
    return sb.ToString();
}

答案 1 :(得分:2)

如果输入字符串包含数字本身,则存在其他解决方案。此代码段将找到所有出现的两位数,并替换它们而不管其他字符。无论其他解决方案如何,我个人认为这个解决方案非常简单易懂。

Dictionary<string, string> map = new Dictionary<string, string>();
map["11"] = "c";
map["12"] = "o";
map["13"] = "m";

string inputText = @"111213";

string outputText = Regex.Replace(inputText, @"\d\d", (MatchEvaluator)delegate(Match match)
{
    return map[match.Value];
});

答案 2 :(得分:-1)

修改

我使用了混合StringRegex方法:

// you can add to list your replacement strings to this list 
var rep = new List<string> {"c", "o", "m"};
var inputString = "user types 111213";

// this replace first two numbers with 'c', second with 'o' and third with 'm'

foreach (string s in rep)
{
    Match match = Regex.Match(inputString, @"(\d{2})");
    if (match.Success)
        inputString = inputString.Remove(match.Index, 2).Insert(match.Index, s);
}