Skip to main content
 首页 » 编程设计

c#之将 "ABC42"替换为 "Douglas"但保持 ABC421 或 ABC4244 不变的正则表达式

2024年02月01日25傻小

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

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

我想用“Douglas”替换“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");