好吧标题说明了一切...

我有一个文件,其中包含相同字符串的不同样式,后跟不同的整数。假设我有几次ABC42,几个ABC422和一个ABC4244。

我想用“道格拉斯”代替“ ABC42”,并保持文本中的ABS422和ABC4244完整无缺。

我正在使用.Net正则表达式解析器。

提前致谢

最佳答案

您可以使用单词边界(\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");

关于c# - 正则表达式用“道格拉斯”替换“ABC42”,但保留完整的ABC421或ABC4244,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22058240/

10-11 01:22