我想知道如何每2位数字对字符串进行Regex.Replace
。
例如:如果用户键入111213,我想用c替换11,用o替换12,用m替换13。
显然我之前已经为每个字母分配了值,我只是不了解正则表达式告诉它每2位数更换一次。
任何帮助或指向好文章的指针都将不胜感激。
Rafael Ruales。
答案 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)
修改强>
我使用了混合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);
}