我想知道如何对Regex.Replace
每 2 位数字执行一次字符串。例如:如果用户输入 111213,我想将 11 替换为 c,将 12 替换为 o,将 13 替换为 m。
显然我之前已经为每个字母分配了值,我只是对正则表达式知之甚少,无法告诉它每 2 位数字进行一次替换。
任何帮助或指向一篇好文章的指针将不胜感激。
拉斐尔·鲁阿莱斯。
我根本不会尝试使用正则表达式。当我读到它时,你只想取每两个字符并用其他东西替换它们。像这样的东西:
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();
}
如果输入字符串仅包含数字本身,则存在其他解决方案。此代码段将查找所有出现的两位数字并替换它们,而不考虑其他字符。不管其他解决方案,我个人认为这个非常简单易懂。
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];
});
编辑
我使用了混合的String
和Regex
方法:
// 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);
}