好吧标题说明了一切......
我有一个文件,其中包含相同字符串的不同风格,后跟不同的整数。假设我有几次ABC42,一些ABC422和一个ABC4244。
我想用“道格拉斯”取代“ABC42”,并保持文本中的ABS422和ABC4244完好无损。
我正在使用.Net正则表达式解析器。
提前致谢
答案 0 :(得分:3)
您可以使用字边界(\b
元字符)来准确匹配目标文本。您的模式将是:\bABC42\b
string input = " Let's say I have ABC42 a couple of times, a few ABC422 and one ABC4244.";
string pattern = @"\bABC42\b";
string result = Regex.Replace(input, pattern, "Douglas");
编辑:回应评论询问这是否适用于“zzABC42 _”...
在这种情况下不起作用,因为使用\b
的整个要点是匹配单词边界。由于该模式使用\b
围绕“ABC42”,因此它与整个单词相匹配。要匹配“zzABC42_”,我们不能再使用字边界了。
相反,我们需要部分匹配它并提出新标准。假设此条件部分匹配“ABC42”,只要“42”之后没有其他数字。我可以删除\b
并使用负向预测来防止匹配额外的数字。这类似于以下模式:ABC42(?!\d)
string input = "Hello zzABC42_, ABC422 and ABC4244.";
string pattern = @"ABC42(?!\d)";
string result = Regex.Replace(input, pattern, "Douglas");
答案 1 :(得分:2)
您可以使用以下代码,前提是ABC42
本身就是一个单词(下面的正则表达式基于单词边界匹配)。
String input = "ABC42 a couple of times, a few ABC422 and one ABC4244 ABC42.";
String pattern = @"\bABC42\b";
String output = Regex.Replace(input, pattern, "Douglas");