是否可以使用单个RegEx基于不同的匹配模式替换不同的字符。例如,如果您有以下字符串:
iOoi9345
你能写一个正则表达式来说明用1替换任何i和任何O,无论是小字母还是大写字母整数字符串为0(零)还是需要分多步完成?
我问这个的原因是我正在构建一个UI,我想知道是否足以提供一些文本框,一个用于模式,一个用于替换它的值或者我是否必须提供列表,其中将定义多个RegEx,每个RegEx处理自己的用例。
我很感激反馈。
由于
答案 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]);