1

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

显然我之前已经为每个字母分配了值,我只是对正则表达式知之甚少,无法告诉它每 2 位数字进行一次替换。

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

拉斐尔·鲁阿莱斯。

4

3 回答 3

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();
}
于 2012-07-29T19:24:57.320 回答
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];
});
于 2012-07-29T19:32:32.523 回答
-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);
}
于 2012-07-29T19:17:42.903 回答