在.Net中使用单个RegEx进行多次替换

时间:2017-10-26 01:14:45

标签: c# .net regex

是否可以使用单个RegEx基于不同的匹配模式替换不同的字符。例如,如果您有以下字符串:

iOoi9345

你能写一个正则表达式来说明用1替换任何i和任何O,无论是小字母还是大写字母整数字符串为0(零)还是需要分多步完成?

我问这个的原因是我正在构建一个UI,我想知道是否足以提供一些文本框,一个用于模式,一个用于替换它的值或者我是否必须提供列表,其中将定义多个RegEx,每个RegEx处理自己的用例。

我很感激反馈。

由于

2 个答案:

答案 0 :(得分:3)

您无法使用.NET Regex指定条件替换。

但您可以将Regex.Replace与委托人一起使用:

Regex.Replace("iOoi9345", "i|[Oo]", m => m.Value == "i" ? "1" : "0")

答案 1 :(得分:0)

您可以创建映射字典并定义替换字词......

// say this is your input, to define the replacement convention
string uiTextBox = "i:1, I:1, o:0, O:0";

string[] conversion = uiTextBox.Split(new char[] { ',' });
IDictionary<string, string> map = new Dictionary<string, string>();
foreach (string rule in conversion)
{
    string[] r = rule.Trim().Split(new char[] { ':' });
    map.Add(r[0], r[1]);
}

/* map would contain, {"{i, 1}, {I, 1}, {o, 0}, {O, 0}"} */
var str = "aiAIboBOCDEF";
var regex = new Regex(String.Join("|", map.Keys));
var replaceStr = regex.Replace(str, m => map[m.Value]);