【发布时间】:2010-10-19 14:32:20
【问题描述】:
我想使用前瞻正则表达式替换 System.Text.RegularExpression.Replace(...) 方法。
现在我想知道怎么了。看这个示例代码:
string input = "stackoverflow";
string replacement = "#";
var pattern1 = "(?=[a-z])o";
var result1 = Regex.Replace(input, pattern1, replacement);
// result1 = stack#verfl#w (as expected)
var pattern2 = "(?=[a-k])o";
var result2 = Regex.Replace(input, pattern2, replacement);
// result2 = stackoverflow (expected: stack#overflow)
var pattern3 = "(?=k)o";
var result3 = Regex.Replace(input, pattern3, replacement);
// result3 = stackoverflow (expected: stack#overflow)
var pattern4 = "[a-k]";
var result4 = Regex.Replace(input, pattern4, replacement);
// result4 = st###ov#r#low (as expected)
var pattern5 = "([a-k])o";
var result5 = Regex.Replace(input, pattern5, "$1#");
// result5 = stack#verflow" (as expected)
这很奇怪。
我可以在我的前瞻表达式中使用[a-z],但不能使用[a-k],甚至不能使用k。
我真正想要的是最后一个例子(pattern5)的结果。这是一种解决方法,但我很认真,为什么 pattern2 或 pattern3 没有返回预期的结果。结果。
【问题讨论】: